如何解决char *指针数组在C中不递增
我正在尝试编写一个程序来读取文件,打印文件中的内容,将所述文件的内容添加到数组中,从数组中打印,然后使用数组的内容写入文件。
我的问题是当我尝试打印到文件时,该数组只打印我的 char* 数组中的最后一个条目。为什么会发生这种情况?
问题代码如下:
char name[100];
int age = 0;
float bBalance = 0;
char* namesArray[100];
int ageArray[100];
float floatArray[100];
for (int i = 0; i < 100; ++i)
{
namesArray[i] = (char*)malloc(100);
}
fptr = fopen("NTD.txt","r");
int lPtr = 1;
if (fptr == NULL)
{
exit(1);
}
else
{
while (fscanf(fptr,"%99[^,],%d,%f",name,&age,&bBalance) != EOF)
{
namesArray[lPtr] = name;
ageArray[lPtr] = age;
floatArray[lPtr] = bBalance;
printf("%s \n",namesArray[lPtr]);
printf("%d \n",ageArray[lPtr]);
printf("%f \n",floatArray[lPtr]);
lPtr++;
}
fclose(fptr);
}
fptr = fopen("writeto.txt","w");
if (fptr == NULL)
{
exit(1);
}
else
{
int i = 1;
while (lPtr != 0)
{
fprintf(fptr,"%s,%f \n",namesArray[i],ageArray[i],floatArray[i]);
i++;
}
fclose(fptr);
}
这是最终文件的样子:
Jane,50,420.69
Sam,20,50.00
Fabian,21,682.22
Zac,35,40000.00
Gabe,12,0.00
Shy,29,12.00
Charlot,99,0.00
Gen,15,64592.68
Guy,98,20000.00
Bill,60,1000000.00
实际上是这样的:
Bill,420.690002
Bill,50.000000
Bill,682.219971
Bill,40000.000000
Bill,0.000000
Bill,12.000000
Bill,64592.679688
Bill,20000.000000
Bill,1000000.000000
如果还有什么需要,请告诉我
解决方法
namesArray[lPtr] = name;
这是你的问题。您使 namesArray
中的每个元素都指向 name
。 name
为每一行读取一个新值,最后,它包含读取的最后一个值。您预先malloc
分配的所有存储空间都已泄露(它仍处于分配状态,但您不再持有任何指向它的指针,这意味着您无法使用它,也无法释放它)。
您想要执行 strncpy(namesArray[lPtr],name,100)
以将字符从 name
复制到 char *
中已经存在的 namesArray
,而不是使用 { {1}} 复制指针本身,而不是指向的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。