gpt4 book ai didi

c - 从文件中读取字符串

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

好的,我正在编写的程序中有以下代码

names.txt 包含以下内容:

PersonA.txt
PersonB.txt
PersonC.txt

然后,为了将它们存储到一个数组中,这就是我正在做的:

FILE* fnames;

fnames=fopen("names.txt","r");

nlines=file_lines(fnames); // function I made to calculate lines (working)

f_array[nlines][29]; // 29 just a ramdom number for the length of person


for(i=0; i < nlines; i++)

{

fgets(f_array[i], 29, fnames);

printf("file name: %s\n", f_array[i];

}

但是输出只是像垃圾一样

file name: random letters squares and question marks

file name: (same)

file name: (same)

我没有找到发生这种情况的原因,因为我有其他类似的 fgets工作正常。

////////已解决////////

谢谢你的解决方案,但是现在还有一个小问题

即使文件名正确存储在数组中,我似乎也无法做到这一点:

for(i=0, i < nlines, i++)
f=fopen(f_array[i], "r");
.
.
.

如果我切换到 f=fopen("PersonA.txt","r") 其余代码将正常工作(只为这个文件做所有事情)。我的意思是让它适用于名称在 f_array 中的所有文件

最佳答案

因为在函数 file_lines 中,您已经遍历文件以计算行数,所以 FILE* 现在指向文件末尾的位置。

您需要将 fseek倒带 到文件的开头以再次读取。

将这两行中的其中一行放在 for 循环之前,或者更好,放在 file_lines 函数的末尾:

fseek(fnames, 0, SEEK_SET); // same as rewind()
rewind(fnames); // same as fseek(fp, 0, SEEK_SET)

如果您的程序在调用函数 file_lines 之前已经读取了文件,您需要在 file_lines

的开头调用此函数
long original_offset = ftell(fnames);

然后在 file_names 的最后调用这个函数

fseek(fnames, original_offset, SEEK_SET);

或者,您可以在第一次迭代时读取文件名。

关于c - 从文件中读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40824961/

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