我有一个简单的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”
而且不知道问题出在哪里。
答案 0 :(得分:3)
您错过了将空字符放在 hLength 末尾并添加
hLength[2] = 0;
您有输出,因为在您的情况下 string 在 hLength 之后,但这当然是随机影响
答案 1 :(得分:1)
hLength[2]
仍未初始化。除非使用空终止符填充,否则将其传递给任何期望使用字符串参数的函数都是未定义的行为。
虽然您可以手动将hLength[2]
填充为零,就像处理位置0
和1
一样,但更惯用的方法是使用库函数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 ... }
中的花括号将数组部分初始化时,才隐式地用零填充数组的其余部分。在声明之后分配数组的各个元素将不会为您这样做。