【问题标题】:When reading a file with 3 characters per line, sizeof(char) doesn't work读取每行 3 个字符的文件时,sizeof(char) 不起作用
【发布时间】:2018-03-05 07:42:16
【问题描述】:

我正在读取一个名为 data.txt 的文件,如下所示:

b    5
b    2
b    9

每行有 3 个字符:制表符之间的空格。

我有以下代码一次读取一行。

int main(int argc, char * argv[]){
    FILE * filePointer;
    filePointer = fopen("data.txt", "r");
    char singleLine[3*sizeof(char)];

    while(!feof(filePointer)){
        fgets(singleLine, 3*sizeof(char), filePointer);
        //printCharArray(singleLine); 
        puts(singleLine);
    }

    fclose(filePointer);
    return 0;
}

singleLine 基本上是每行文本放入的缓冲区。我最初把它写成char singleLine[20],一个足够大的任意数字,但我希望它准确,所以我做了char singleLine(3*sizeof(char))。我的逻辑是每行有 3 个字符,所以这应该可行。

不幸的是它没有,运行它时,它打印出来如下:

b 

5

b 

2

b 

9

当我粗心大意时,char singleLine[20],它可以正常工作,如下所示。但我想以正确的方式做到这一点。怎么了?

b    5
b    2
b    9

【问题讨论】:

  • 不是你的问题的答案,但是:sizeof(char) 总是1,所以很少有任何理由明确写出来。
  • 正确的方法是不要对缓冲区大小如此吝啬。如果您认为您的最大大小是3,那么32 字符缓冲区就足够了。并查看Why is while ( !feof (file) ) always wrong?
  • fgets() 想要读取 文本,例如 btab5line feed - 即 4 个字符。在读取 line 之后,fgets() 会附加一个 null 字符。所以singleLine[] 至少应该是singleLine[5]

标签: c pointers char sizeof


【解决方案1】:
  1. 您的数组只能容纳两个字符和空终止符。
  2. 您的行有四个字符(包括换行符)。

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2017-11-20
    • 2016-06-16
    • 1970-01-01
    • 2012-11-12
    相关资源
    最近更新 更多