我想从控制台读取 4 个字符,为此我正在这样做,但它没有像我期望的那样工作,它读取更多和更少的字符 ..
int main()
{
char arr[4];
scanf("%s",&arr);
printf("%s",arr);
return 0;
}
我对这个程序的输入是这样的:
sachinjainsachin
sachinjainsachin
它打印整个 char 数组,而数组的大小是
4
。我不知道为什么它打印的不仅仅是尺寸,它应该只打印 4 个字符,即 sachi 最佳答案
你在做什么是未定义的行为。它完全有效的事实只是巧合。在这种情况下发生的事情是随机且不相关的,因为它未定义。使用 scanf()
在字符串数组的范围之外写入最多只会导致您看到的内容。在最坏的情况下,它会使您的程序因段错误而崩溃。
请注意, arr[4] 仅适用于具有 3 个字符和一个终止符的字符串。 C 中的每个字符串都需要一个 \0
作为其末尾的终止符。
如果您不需要可变最大长度,您可以执行以下操作:
int main (void)
{
char str[5] = { };
scanf("%4s", str);
printf("%s",str);
return 0;
}
此外,如果您想将可变数量的字符读入您的字符串,您可以这样做:int main (void)
{
char del[128] = { };
char str[5] = { };
int max = 4;
sprintf(del, "%%%dc", max);
scanf(del, str);
printf("%s",str);
return 0;
}
关于c - 如何在 c .. 中准确读取 4 个字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33868491/