c - 读取每行 3 个字符的文件时,sizeof(char) 不起作用

标签 c pointers char sizeof

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

b    5
b    2
b    9

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

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

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

最佳答案

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

关于c - 读取每行 3 个字符的文件时,sizeof(char) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386535/

相关文章:

c - 当要解析的文件是由程序编写时使用解析器生成器或手动代码?

c++ - 为什么C/C++会自动将char/wchar_t/short/bool/enum类型转换为int?

c++ - 尝试创建一个 3D vector ,该 vector 将保存指向指向 unsigned char 的指针的指针

wpf - 文本框密码字符

在循环中调用 pthread_cancel() 显示内存使用量增加

c - 汉诺塔 - 用户正在移动磁盘 (c)

c - 防止本地指针

c - 结构体/构造函数/指针 - C 编程语言

C - 字符串返回 NULL

c - 当使用 scanf 获取整数和 char 值时,程序会跳过 scanf