gpt4 book ai didi

c - 使用 fgets() 和 strtok() 以逗号分隔符读取文件

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

我有一个文本文件,其中包含三个以逗号分隔的字段。我的文本文件的内容示例:12345,真正的编程新手,BS ME为了将文件加载到程序中,我使用了下面的代码......我的问题是有时代码有效,有时却不起作用(没有出现错误消息,程序只是自行关闭并且不会继续)。我还观察到文本文件是空白的(没有写入任何内容)它会自动关闭并且不会继续。非常感谢您的帮助。谢谢!

int read(){
FILE *stream = NULL;
int ctr;
char linebuffer[45];
char delims[]=", ";
char *number[3];
char *token = NULL;
stream = fopen("student.txt", "rt");
if (stream == NULL) stream = fopen("student.txt", "wt");
else {
printf("\nReading the student list directory. Wait a moment please...");
while(!feof(stream)){
ctr=0;
fgets(linebuffer, 46, stream);
token = strtok(linebuffer, delims);
while(token != NULL){
number[ctr] = linebuffer;
token = strtok(NULL, delims);
ctr++;
}
recordCtr++;
}
recordCtr--;
}
fclose(stream);
}

最佳答案

一旦找到 token,就永远不会复制它。您不能复制 linebuffer,因为其中的数据将在加载下一行时被覆盖。

这一行:

number[ctr] = linebuffer;

应该引用 token 来保存最近找到的 token ,但它没有。它可能应该是这样的1:

strcpy(number[ctr], token);

但是你必须更改声明以确保有空间:

char number[3][32];

显然,这会引入缓冲区溢出风险,如果有很长的 token ,它就装不下了。如何最好地处理它留作练习。 :)

1 当临时 vector 用于存储两个数字和一个字符串(名称)时,为什么它被称为“数字”,我无法理解。

关于c - 使用 fgets() 和 strtok() 以逗号分隔符读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335640/

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