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

问题描述 投票:2回答:2

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

c c-strings
2个回答
3
投票

你错过了把空字符结束hLength,添加

hLength[2] = 0;

你有输出,因为在你的情况下字符串是在hLength之后,但这当然是随机效果


1
投票

qazxsw poi仍然没有初始化。除非使用空终止符填充,否则将其传递给期望字符串参数的任何函数都是未定义的行为。

虽然您可以手动填充hLength[2]为零,正如您对位置hLength[2]0所做的那样,更常用的方法是使用库函数1,源字符串上限制为2个字符:

snprintf

甚至,在snprintf(hLength, 3, "%*s", 2, string); 的声明中:

hLength

请注意,隐含地使用零填充数组的其余部分仅在声明时,如char hLength[3] = { string[0], string[1] }; // hLength[2] is initialized with a '\0' now 中的花括号部分初始化数组时才有效。在声明后分配数组的各个元素将不会为您执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.