C-分割故障块


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,必须检查一下(请参见此处为什么)
  • 您必须仔细使用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);
}

相关内容

  • 没有找到相关文章

最新更新