gpt4 book ai didi

c - 将 strcpy 与链表成员一起使用时出现段错误

转载 作者:行者123 更新时间:2023-11-30 16:29:12 24 4
gpt4 key购买 nike

我有一个包含以下数据的文本文件:

11111,First,Last,2,COR,100,SEG,200
22222,F,L,1,COR,100
33333,Name,Name,3,COR,100,SEG,200,CMP,300
***

我需要分隔每行中的数据(在逗号处)并将每行数据添加到链接列表中。这是我用来执行此操作的一段代码:

struct courseInfo{
int courseID;
char courseName[30];
};
typedef struct courseInfo cInf;

struct studentInfo{
char studentID[8];
char firstN[20];
char lastN[25];
int nCourses;
cInf courseInf[10];
struct studentInfo *next;
};
typedef struct studentInfo sInf;
void loadStudentInfo(){
FILE *loadFile;
loadFile = fopen("studentRecords.txt", "r");
while(1){
sInf *loadStudent;
loadStudent = (sInf*)malloc(sizeof(sInf));
char Temp[256];
fgets(Temp,256,loadFile);
if (Temp[0] == '*')
break;
int commaCount = 0;
int i = 0;
while(Temp[i] != '\0'){
if(Temp[i] == ',' && commaCount == 0){
char stdID[8];
strcpy(stdID, Temp);
int commaLoc = 0;
while(stdID[commaLoc] != ','){ //Finds where stdID ends
commaLoc++;
}
for(;commaLoc < 8; commaLoc++){ //Delimits stdID, 8 is the max size of studentID
stdID[commaLoc] = '\0';
}
printf("%s\n", stdID);
strcpy(loadStudent ->studentID, stdID); //Causing segmentation fault
commaCount++;
}

现在,我所做的分离每行数据的方法可能不是最有效的,但我尝试使用 strtok() (它可以很好地读取第一行,但在读取第二行时导致段错误)并且还尝试使用 fscanf 和 %[^,] 但它对我不起作用。无论如何,我不认为我用来分离数据的方法导致了段错误。该循环将继续分离其余数据并将其存储在 loadStudent 的适当成员中。导致段错误的行如上所示。如果您能帮助确定此错误的原因,我们将不胜感激。

最佳答案

您的问题从这里开始:

strcpy(stdID, Temp);

这会将整个第一行复制到stID中。由于 stID 只能容纳 8 个字符,并且第一行超过 8 个字符,因此您编写的内容越界,这是未定义的行为。之后任何事情都可能发生。

您写道您无法使 strtok 工作。试试这个:

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

int main(void) {
char str[] = "11111,First,Last,2,COR,100,SEG,200";
char* p = strtok(str, ",");
while(p)
{
printf("%s\n", p);
p = strtok(NULL, ",");
}
return 0;
}

输出:

11111
First
Last
2
COR
100
SEG
200

关于c - 将 strcpy 与链表成员一起使用时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51959177/

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