将两个字符从字符串移到另一个字符串出错

Move two chars from string into another string goes wrong

我有一个简单的 c 程序,我想做的是从字符串中取出前两个数字,将其放入另一个字符串中,该字符串将只有这两个数字,然后将其转换为 int。

hLength 的 strlen 为 54...

char string[100] = ":50010000214601360121470136007EFE09D21901\n";
char hLength[3];
int length,c;

hLength[0] = string[1];
hLength[1] = string[2];

printf("%s", hLength);

system("pause");
return 0;

现在的输出是“50:50010000214601360121470136007EFE09D21901”
但我只想要“50”
也不知道哪里出了问题。

你错过了将空字符放在结尾 hLength,添加

hLength[2] = 0;

你有你的输出,因为在你的情况下 stringhLength 之后,但这当然是随机效应

hLength[2] 仍未初始化。除非用空终止符填充它,否则将它传递给任何需要字符串参数的函数都是未定义的行为。

虽然您可以手动将 hLength[2] 填充为零,就像您对位置 01 所做的那样,但更惯用的方法是使用库函数 snprintf 源字符串限制为 2 个字符:

snprintf(hLength, 3, "%*s", 2,  string);

甚至,在 hLength 的声明处:

char hLength[3] = { string[0], string[1] }; // hLength[2] is initialized with a '[=11=]' now

请注意,仅当在声明时数组 部分 { val1, val2 ... } 中那样用大括号初始化时,用零隐式填充数组的其余部分才有效。在声明后分配数组的单个元素不会为您执行此操作。