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错误所做的全部修改),但我似乎无法查明。

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

任何帮助将不胜感激!

最佳答案

代码的一些改进


在读取/写入文件之前检查fopen的结果
在使用变量值之前初始化变量
使用sizeof而不是常量(如注释中所述)
strtok()可以返回NULL,必须对此进行检查(请参见here原因)
由于this,您必须谨慎使用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);
}

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

10-08 22:01