作者codefarmer (自信)
看板C_and_CPP
标题[问题]scanf读进variable length array问题
时间Thu Sep 14 00:02:50 2017
开发平台(Platform): Win7
编译器: GCC
问题(Question):
程式利用scanf()读档案至int s[num], int t[num],
问题发生在写入 t[4] 时, s[0]的值跟着被覆盖,
利用printf印出 t[4] 跟 s[0]的 address 发现两者相同...
想请问大神们, 明明是两个不同的ARRAY,
为何compiler 将两者的element 放在相同位址?
是否是小弟有疏忽,才造成这样的情形呢?
喂入的资料(Input):
5
1 2 4 6 8
3 5 7 9 10
预期的正确结果(Expected Output):
num = 5
t[i] = 3; s[0] = 1
t[i] = 5; s[0] = 1
t[i] = 7; s[0] = 1
t[i] = 9; s[0] = 1
t[i] = 10; s[0] = 1
错误结果(Wrong Output):
num = 5
t[i] = 3; s[0] = 1
t[i] = 5; s[0] = 1
t[i] = 7; s[0] = 1
t[i] = 9; s[0] = 1
t[i] = 10; s[0] = 10
&s[0] = 0xffffcb80, &t[4] = 0xffffcb80
程式码(Code):
#include <stdio.h>
int main(int argc, char const *argv[])
{
const int num;
int s[num];
int t[num];
scanf("%d", &num);
printf("num = %d\n", num);
for (int i = 0; i < num; ++i)
scanf("%d", &s[i]);
for (int i = 0; i < num; ++i) {
scanf("%d", &t[i]);
printf("t[i] = %d; s[0] = %d\n", t[i], s[0]);
}
printf("&s[0] = %p, &t[4] = %p\n", &s[0], &t[4]);
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.224.46.108
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1505318573.A.3A7.html
1F:→ ilikekotomi: num的值是在定义之後给的 这样s和t的阵列大小不是5 09/14 00:13
2F:推 jerryh001: 宣告阵列的时候 num还是未知数 09/14 00:13
3F:→ windada2: 阵列设置初始大小是不能用变数的呦 09/15 01:17
4F:推 LPH66: C99 可以, gcc 在 C90 模式和 C++ 是以 extension 支援 09/15 01:33