【发布时间】:2016-08-22 11:02:37
【问题描述】:
我是stackoverflow 的新用户。我用c写了这段代码,没有问题,输出是正确的。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str[10];
FILE * fp;
fp = fopen ("file.txt", "w+");
fputs("We\nare\nin\n2016", fp);
rewind(fp);
fscanf(fp, "%s", str[0]);
fscanf(fp, "%s", str[1]);
printf("Read String1 |%s|\n", str[0] );
printf("Read String2 |%s|\n", str[1] );
fclose(fp);
return(0);
}
但是当我使用 char *str[15] 而不是 char *str[10] 时,结果是分段错误。怎么了?
【问题讨论】:
-
str数组中的每个指针指向哪里?仅仅因为具有未定义行为的程序似乎可以工作并不意味着它是正确的。 -
为什么这对于 str[10] 是正确的?我也初始化了str[15],但是不行
-
它是 not 正确的,例如
char *str[10],这似乎只是纯粹的运气(好运或坏运是一个观点问题)。它只是似乎起作用,您仍然会看似随机地覆盖一些内存。请记住,不幸的是,未定义行为的可能症状之一是它确实有效。
标签: c filestream scanf