如何在c ..中准确读取4个字符?

Sac*_*ain 3 c

我正在为此从控制台读取正好4个字符,但是我却无法正常工作,它读取了更多或更少的字符..

    int main()
{
    char arr[4];
    scanf("%s",&arr);
    printf("%s",arr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我对该程序的输入是这样的:

sachinjainsachin
sachinjainsachin
Run Code Online (Sandbox Code Playgroud)

它打印整个char数组,而array的大小为4。我不知道为什么它要打印的多于尺寸,它只能打印4个字符,即sachi

Mag*_*sch 5

您正在执行的操作是未定义的行为。它完全起作用的事实仅仅是偶然的。在这种情况下,发生的事情是随机且无关紧要的,因为它是不确定的。在字符串数组的边界外编写代码scanf()最多将导致您看到的内容。最坏的情况是它将使您的程序由于分段错误而崩溃。

请注意,arr [4]仅适用于具有3个字符和一个终止符的字符串。C中的每个字符串都需要\0在其末尾添加一个终止符。

如果不需要可变的最大长度,则可以执行以下操作:

int main (void)
{
char str[5] = { };
scanf("%4s", str);
printf("%s",str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

另外,如果您想将可变数量的字符读入字符串,则可以这样进行:

int main (void)
{
char del[128] = { };
char str[5] = { };
int max = 4;
sprintf(del, "%%%dc", max);
scanf(del, str);
printf("%s",str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)