【发布时间】:2018-02-07 16:51:41
【问题描述】:
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 错误修改的全部内容),但我似乎无法确定它。
我知道分段错误与访问我不应该访问的内存有关,但我什至不确定我在代码中的哪个位置。
任何帮助将不胜感激!
【问题讨论】:
-
你试过调试代码吗?
-
您确定令牌的长度固定为指定的 20 和 30?
-
您的调试器会告诉您段错误发生的确切位置。用它。如果您不知道如何使用调试器,那么现在可能是开始学习的好时机。另请阅读:minimal reproducible example。并且不要使用
strncpy,目标字符串可能不是NUL终止的,阅读this -
显示整个代码,而不仅仅是一部分。
filen是什么?它被初始化了吗?为什么不检查文件是否打开且没有错误?if (fp == NULL) return;99% 你还没有打开文件,fp为 NULL。
标签: c segmentation-fault