Skip to content

Instantly share code, notes, and snippets.

@daa233
Last active April 4, 2017 12:01
Show Gist options
  • Save daa233/614530aab104181ca6db0e6f51e63157 to your computer and use it in GitHub Desktop.
Save daa233/614530aab104181ca6db0e6f51e63157 to your computer and use it in GitHub Desktop.

C语言中数组的初始长度能不能由用户输入来决定? 在我学C语言时,老师通过VC6.0告诉我们不可以。但是现在我用gcc(ver. 5.4)却可以编译成功,而且gcc没有对数组越界进行报错。具体来说,如果定义数组int a[n],初始长度由用户输入的n来决定,那么越界部分既可以读取,也可以写入;如果定义数组int b[2],即初始长度固定为某个整数,那么可以读取越界值b[2]、b[3]等,但是无法写入(运行程序时,向越界部分写入时会报stack smashing的错误)。读取到的越界部分的值均是没有初始化过的、内存中的随机值。

#include <stdio.h>

int main(int argc, char *argv[])
{
    int n;
    scanf("%d", &n);
    int a[n];

    for (int i = 0; i < n*2; i++) {
        printf("a[%d] = %d\n", i, a[i]);
    }
    for (int i = 0; i < n*2; i++) {
        a[i] = -1;
        printf("a[%d] = %d\n", i, a[i]);
    }

    int b[2];
    for (int i = 0; i < 4; i++) {
        printf("b[%d] = %d\n", i, b[i]);
    }
    // b[2] = 3;    // stack smashing
    /*for (int i = 0; i < 4; i++) { // stack smashing
        b[i] = -2;
        printf("b[%d] = %d\n", i, b[i]);
    }*/

    return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment