我试图只读取文件中的前3个字符 - c

时间:2018-06-01 07:37:45

标签: c string file

您好我正在构建一个应用程序,它将检查文件中的数字是否全部是固定的,如果没有 - 修复它们(取决于具体的国家/地区代码)。 为了检查数字是否良好,我首先需要查看国家/地区代码,为此我需要读取前3个字符(来自文件中的电话号码)以查看该号码是否还有国家/地区代码。 当我运行下面的代码时,我正在

  

变量'country_code'周围的堆栈已损坏“。

我认为我从字符串中读取特定的3个字符来解决问题,但我找不到到底是做什么的。

void fix_file_il_country(char *filename)
{
    FILE *f = fopen("1.txt", "r");                  //The file to check from
    if (f == NULL)
    {
        printf("EROR\n");
        return;
    }
    FILE *fp = fopen(filename, "w");                //The new file with fixed numbers
    if (f == NULL)
    {
        printf("EROR\n");
        return;
    }
    char num[20];
    char country_code[3];
    fscanf(f, "%3s %s", &country_code, &num);
    while (!feof(f))
    {
        if (strlen(num) == 12)
            if (country_code == "972")
                fprintf(fp, "%s\n", num);
        fscanf(f, "%3s %s", &country_code, &num);
    }
    fclose(f);
    fclose(fp);
}

数字如:9725XXXXXXXX应写入新文件 不应写入如下数字:123XXXXXXXXX,或者编号多于\少于12的字符。

2 个答案:

答案 0 :(得分:1)

您没有为空终止符提供空间。

char country_code[3];

应该是

char country_code[4];

另请参阅Why is “while ( !feof (file) )” always wrong?

答案 1 :(得分:1)

我可以看到两个潜在的问题:

  1. char数组也需要存储空终止,因此应将其定义为

    char country_code[4]
    

    否则无法定义数组的结尾。

  2. scanf中,您正在传递指针的指针。你应该改变

    fscanf(f, "%3s %s", &country_code, &num)
    

    fscanf(f, "%3s %s", country_code, num)
    

    没有&