将两个字符从字符串移到另一个字符串出错
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;
你有你的输出,因为在你的情况下 string 在 hLength 之后,但这当然是随机效应
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 '[=11=]' now
请注意,仅当在声明时数组 部分 像 { val1, val2 ... }
中那样用大括号初始化时,用零隐式填充数组的其余部分才有效。在声明后分配数组的单个元素不会为您执行此操作。
我有一个简单的 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;
你有你的输出,因为在你的情况下 string 在 hLength 之后,但这当然是随机效应
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 '[=11=]' now
请注意,仅当在声明时数组 部分 像 { val1, val2 ... }
中那样用大括号初始化时,用零隐式填充数组的其余部分才有效。在声明后分配数组的单个元素不会为您执行此操作。