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

时间:2019-02-16 18:11:01

标签: c c-strings

我有一个简单的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”
而且不知道问题出在哪里。

2 个答案:

答案 0 :(得分:3)

您错过了将空字符放在 hLength 末尾并添加

hLength[2] = 0;

您有输出,因为在您的情况下 string hLength 之后,但这当然是随机影响

答案 1 :(得分:1)

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 '\0' now

请注意,仅在声明时使用{ val1, val2 ... }中的花括号将数组部分初始化时,才隐式地用零填充数组的其余部分。在声明之后分配数组的各个元素将不会为您这样做。