#include <stdio.h>
#include <string.h>
int main(void) {
char user[] = { [0 ... 9 ] = '\0' }; // Initialising a char array of len 10 and default all element of char array is = '\0'
printf("Enter your name >> "); // stdout -> Enter your name >>
scanf("%[^\n]c", user); // stdin -> `aldjflajdflajdflajfdlajfdlajfd` NODE: len of entr string from stdin is > then 10
printf("%zu\n", strlen(user)); // 33
return 0;
}
我有一个 char 数组 [10] 但输入字符串怎么比 char 数组长?
如果我正确理解了这个问题,您会想知道为什么可以将更多元素输入到具有 10 个元素的数组中。我对这个问题的回答如下:您已经在内存中的某个位置静态分配了 10 个字节的内存空间,后面可能有也可能没有额外的可用空间。接下来你要做的就是向该数组中加载不必要的元素,有时你不会得到任何错误,但其他时候(85% 的情况下都会发生),运行程序后,你会得到以下输出:“**堆栈粉碎检测到***:终止中止(核心转储)”,这意味着您基本上覆盖了未指定的内存,可能会损害某些数据等。因此,我的建议是在输入后创建一个附加条件,您预计程序的用户输入超过 10 个字符,从而向他们指示错误。另一种解决方案是动态内存分配。这都是我从非常基本和直接的角度出发的。热烈的问候!