gpt4 book ai didi

c - 分段断层

转载 作者:行者123 更新时间:2023-11-30 18:11:36 25 4
gpt4 key购买 nike

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);

大家好,

由于某种原因,我的代码中出现段错误错误。

我几乎肯定错误就在上面的小代码块中的某个地方(因为这是我针对段错误所做的所有修改),但我似乎无法查明它。

我知道段错误与访问我不应该访问的内存有关,但我不确定我在代码中的何处执行此操作。

任何帮助将不胜感激!

最佳答案

代码的一些改进

  • 在读/写文件之前检查fopen的结果
  • 在使用变量值之前初始化变量
  • 使用 sizeof 而不是常量(如评论中所述)
  • strtok() 可以返回 NULL,必须检查这一点(参见 here 为什么)
  • 您必须谨慎使用 strncpy(),因为 this

这是您的代码的更正版本

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);
}

关于c - 分段断层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45952528/

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