数组限制不起作用

Adn*_*han 2 c arrays

我写了这个小程序来练习数组,它应该最多包含10个字符,结尾是\ 0.它工作正常,但它工作得很好,即使我输入一个50个字符的名字,它也会输出正确的输入.是什么赋予了?

#include <stdio.h>


int main(int argc, char const *argv[])
{
char name[11];

printf("Enter your name: ");
scanf("%s", name);

printf("Hi, %s\n", name);   
return 0;
}
Run Code Online (Sandbox Code Playgroud)

Adr*_*ish 8

您将覆盖已分配的数组的末尾 - 您需要指定scanf的一部分,以读取要读取的字符串的长度以确保它适合.

scanf("%10s", name);
Run Code Online (Sandbox Code Playgroud)

对代码的改进是生成格式字符串,以便始终具有正确的大小.

#include <stdio.h>


int main(int argc, char const *argv[])
{
char name[11];
char formatstr[50];

snprintf(formatstr, sizeof(formatstr), "%%%ds", sizeof(name)-1);

printf("Enter your name: ");
scanf(formatstr, name);

printf("Hi, %s\n", name);
return 0;
}
Run Code Online (Sandbox Code Playgroud)