Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用运行时设置的变量指定字符数组的大小_C_Arrays_String_Runtime - Fatal编程技术网

C 使用运行时设置的变量指定字符数组的大小

C 使用运行时设置的变量指定字符数组的大小,c,arrays,string,runtime,C,Arrays,String,Runtime,我尝试在运行时使用变量集指定字符数组的大小 #include<stdio.h> int main(void) { int n; printf("ENTER THE NUMBER OF Characters IN THE STRING:\n"); scanf("%d",&n); char string[n]; printf("Enter the string:\n"); scanf("%s",string); print

我尝试在运行时使用变量集指定字符数组的大小

#include<stdio.h>

int main(void)
{
    int n;
    printf("ENTER THE NUMBER OF Characters IN THE STRING:\n");
    scanf("%d",&n);
    char string[n];
    printf("Enter the string:\n");
    scanf("%s",string);
    printf("\nTHE STRING IS:\n");
    printf("%s\n",string);
    return 0;
}  

即使将字符串中的字符数指定为2,为什么要显示输入的整个字符串

越界访问数组索引,已调用

C11标准:

J.2未定义的行为

数组下标超出范围,即使对象明显不在范围内 可通过给定的下标访问(如左值表达式中的下标
a[1][7]
给定声明int
a[4][5]
)(6.5.6)

将指针加减到数组中或数组外 对象和整数类型生成的结果指向刚好超出 数组对象,用作一元*运算符的操作数 进行评估(6.5.6)


在访问超出数组范围的索引时,由于
ArrayIndexOutOfBound
,您将获得未定义的行为

在C语言中,不检查边界允许C程序运行得更快

你可能更喜欢

动态内存分配


如果您访问数组元素超出范围,它将调用未定义的行为。由于
C
不检查数组边界条件,编译器不会抛出错误,但会调用未定义的行为


即使将字符串中的字符数指定为2,为什么要显示输入的整个字符串?程序员的任务是确保有足够的内存空间在运行时存储数据并相应地处理这些事情

因为确保你有足够的空间是你的工作,所以scanf会尽可能多地阅读。
ENTER THE NUMBER OF Characters IN THE STRING:
2
Enter the string:
abcdefghijk

THE STRING IS:
abcdefghijk