FILE *fp;
fp = fopen(filen, "wb");
const char tok[2] = ",";
char str[340];
while (fgets(str, 340, stdin) != NULL)
{
struct test loadTest;
printf("You entered: %s", str);
strncpy(loadTest.level, strtok(str, tok), 20);
strncpy(loadTest.first, strtok(NULL, tok), 30);
fwrite(&loadTest, sizeof(struct test), 1, fp);
}
fclose(fp);
大家好,
出于某种原因,我的代码中出现了分段错误错误。
我几乎是肯定的,错误是在上面的小代码块中的某个地方(因为那是我为seg故障修改的所有内容),但我似乎无法确定它。
我知道分段错误与访问我不应该访问的内存有关,但我不确定我在代码中的位置。
非常感谢任何帮助!
答案 0 :(得分:-1)
代码的一些改进
fopen
的结果
sizeof
代替常量(如评论中所述)strtok()
可以返回NULL
并且必须检查(请参阅here原因)strncpy()
以下是您的代码的更正版本
FILE *fp;
fp = fopen(filen, "wb");
if (fp == NULL)
{
printf("Error opening file: %s", filen);
}
else
{
const char tok[2] = ",";
char str[340];
while (fgets(str, sizeof(str), stdin) != NULL)
{
struct test loadTest;
char *level;
char *first;
memset(&loadTest, 0, sizeof(loadTest));
printf("You entered: %s", str);
level = strtok(str, tok);
if (level == NULL)
{
continue; // bad input ?
}
first = strtok(NULL, tok);
if (first == NULL)
{
continue;
}
strncpy(loadTest.level, level, sizeof(loadTest.level)-sizeof(char));
strncpy(loadTest.first, first, sizeof(loadTest.first)-sizeof(char));
fwrite(&loadTest, sizeof(loadTest), 1, fp);
}
fclose(fp);
}