gpt4 book ai didi

c - 一个字符串在一个函数中突然失去了它的值(value)

转载 作者:行者123 更新时间:2023-12-02 08:25:44 26 4
gpt4 key购买 nike

我有代码应该从文件中读取文件名,打开这些文件,然后进行一些计算。这些文件包含数据列。我已经声明了要读入数据的数组。当我在读入之前初始化数组时,包含文件名的字符串表现不稳定。如果删除初始化,问题就解决了。

不稳定的行为是:首先声明的字符串没有保留在内存中。在代码中,如果我首先声明 d[90],那么稍后的打印语句不会打印先前保存的值。可能是什么原因?

代码如下:

#include<stdio.h>
#include<math.h>

main()
{

FILE *data,*model,*filenames;

int i,imax,j,k,l;
float fd[1000],fm[1000],td[1000],tm[1000];
float a;
char d[90],m[90];


k=1;
l=0;

filenames=fopen("filenames.dat","r");


while(fscanf(filenames,"%s %s",d,m)!=EOF)
{
printf("model: %s\ndata: %s\n",m,d);

for(i=1;i<=1000;i++)
{
fd[i]=0;
fm[i]=0;
td[i]=0;
tm[i]=0;
}


printf("datafile name: %s\n",d);
printf("modelfile name: %s\n",m);

data=fopen(d,"r");

for(i=1;i<=1000;i++)
if(fscanf(data,"%f %f %f %f",&td[i],&fd[i],&a,&a)!=EOF)
k++;
else
break;

fclose(data);

printf("modelfile name: %s\n",m);
model=fopen(m,"r");

for(i=1;i<=1000;i++)
if(fscanf(model,"%f %f %f %f %f %f",&tm[i],&fm[i],&a,&a,&a,&a)!=EOF)
l++;
else
break;

fclose(model);


}

}

最佳答案

在您的代码中,使用 float fd[1000] 等定义,使用 for 循环

for(i=1;i<=1000;i++)
{
fd[i]=0;
fm[i]=0;
td[i]=0;
tm[i]=0;
}

创建off-by-one error因此导致undefined behaviour ,本质上,您正在尝试访问分配的内存。

由于 C 使用基于 0 的索引,您应该使用从 0(size-1) 用于包含 size 元素的数组。

此外,始终检查 fopen() 的返回值反对 NULL 以确保它成功。如果 fopen() 失败,使用返回的指针将再次调用 UB。

关于c - 一个字符串在一个函数中突然失去了它的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32433741/

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