我想从控制台读取 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/

10-11 23:02
查看更多