gpt4 book ai didi

c - 将 strtok() 与 fgets() 一起使用会导致段错误,但指针应该是正确的

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:40 25 4
gpt4 key购买 nike

我是 C 的新手,我想我会学到更多。我正在尝试编写一些代码来读取预先存在的文本文件并格式化并将其写入磁盘。当它编译时,每次我不确定我是否应该得到一个段错误时,我都会遇到一个段错误。我浏览了大部分手册页,但找不到任何突出的内容。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
FILE *file = fopen("listing.txt","r"), *output;

char *fvar;
char *svar;
char delim[] = ",";
int num;
char ch;
char line[66];
int listnum = 0;

if(file == NULL){
printf("Cannot open file.\n");
exit(1);
}

output = fopen("report.txt","w");

fprintf(output, "%s", "First Name Last Name Number ");
fprintf(output, "%s", "-------------------------------------");

while(fgets(line, 66, file) != NULL){
ch = line[0];
if((ch >= 'a') && (ch <= 'z')){
fvar = strtok(line,delim);
svar = strtok(NULL,delim);
listnum++;
}
else {
num = atoi(line);
}
fprintf(output, "%s", fvar);
fprintf(output, "%15s", svar);
fprintf(output, "%30d", num);
fprintf(output, "%56s", "\n");
}
fclose(file); /* done reading from the input file */
fclose(output); /* done writing the the output file */
return 0;
}

我想做的是读取文本文件的一行。如果该行以“string,string”的方式包含信息,则将它们标记化并将它们分别存储在 fvar 和 svar 中。如果是数字串,使用atoi()获取值存入num。

出于某种原因,这会导致段错误,尽管它可以正常编译。我很确定问题出在 fvar = strtok(temp,delim);svar = strtok(NULL,delim); 行中,但我不知道不知道怎么修改。注意:如果我使用 fvar = strtok(line,delim);,也会发生相同的行为。

编辑:已修复,感谢@Chris Dodd。按照我的意愿,我会去拿一本一年级的教科书,重新学习我的字母表。

最佳答案

最有可能的问题是你的第一行输入不是以小写字母开头,所以你从一开始就不会调用 strtok,也不会分配给 svar 或 fvar,但你仍然传递那些(未初始化的)值到 printf,然后给出段错误...

尝试使用调试器单步执行代码以查看它的实际位置。

关于c - 将 strtok() 与 fgets() 一起使用会导致段错误,但指针应该是正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8371538/

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