程序只读取文件计数字符串及其长度。但是字符串的计数器p给了我错误的结果。如果我只打印计数p,结果将是正确的,但如果我打印元素a [i] [1](应该是p),它会给我一个错误的结果。对于元素a [0] [1]中的示例 - 它打印12,其应该是1。
int main(int argv,char* argc[]) {
FILE *f = fopen("d.txt","r");
int a[700000][1];
char str[120];
int i=0,l,p=0,n;
while (fgets(str,120,f)) {
l=strlen(str)-1;
p++;
a[i][0]=l;
a[i][1]=p;
i++;
}
// if I printf("%d",p); result will be correct
n=i-1;
for (i=0;i<=3;i++) {
printf("%d\n",a[i][1]); //result - 12 6 4 8
}
close(f);
return(0);
}
d.txt
没有\ 0 一个\ 0 为\ 0 这里\ 0
结果将是 - 4 2 4 4
答案 0 :(得分:4)
你的问题就在这一行:
int a[700000][1];
这定义了一个类型为 int 的二维数组,但第二个维度为1,从而有效地生成一维数组。
稍后,当您尝试访问数组中的元素时:
a[i][0]=l;
a[i][1]=p;
第一个赋值很好 - 它将内存中的值设置为远离数组开头的 i 整数。
但第二项任务不正确。索引 1 超出第二个维度限制1(0是第一个元素,1是第二个元素)。由于C不进行运行时数组限制检查,因此将其转换为设置一个远离数组开头的 i + 1 整数的元素。
如果你想要一个700000x2数组,声明将如下所示:
int a[700000][2];