gpt4 book ai didi

c - 数组中的错误计数结果

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:54 24 4
gpt4 key购买 nike

该程序只是读取文件计数字符串及其长度。但是字符串的计数器 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

最佳答案

你的问题是这一行:

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];

关于c - 数组中的错误计数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37228578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com