关于C语言中的fwrite函数写入二维数组的问题?

题目描述

我想用fwrite函数将二维数组写入到文件中,但是我打开文件后出现许多空格,即第一行之后的每一行与第一行不对齐。
二维数组的构成为:char buff[10][128] = { 0 };,利用了sprintf函数将数组进行填充,每一行的格式类似于8 - 47 = -39

文件中的内容

8 - 47 = -39
                                                                                                                   35 + 23 = 58
                                                                                                                   41 + 91 = 132
                                                                                                                  70 - 84 = -14
                                                                                                                  99 - 55 = 44
                                                                                                                   77 / 75 = 1
                                                                                                                    96 + 24 = 120
                                                                                                                  45 - 34 = 11
                                                                                                                   91 * 42 = 3822
                                                                                                                 95 - 71 = 24

有大佬知道怎么解决吗?

======= (来自评论)补充代码 ========

//定义字符串数组,用于存入到文件中
char buff[10][128] = { 0 };
//存放变量
int a, b;
//存放运算符
char c;
for(...){
sprintf(buff[i], "%d %c %d = %d\n", a, c, b, num);
}
fwrite(buff,1,sizeof(buff),file);
阅读 2.3k
2 个回答

buff 里又很多 '\0',都被写进去了啊。

这是因为buff包含了很多'\0'字符,在部分编辑器里面,会显示为空白。

#include <stdio.h>
#include <string.h>


int main() {
        // 这一行定义了一个总大小为1280字节的buffer,并且全部初始化为'\0'
        char buff[10][128] = { 0 };

        //存放变量
        int a, b;
        //存放运算符
        char c;

        FILE *file = fopen("a.txt", "w");
        for(int i = 0; i < 10; ++i){
                a = i + 1;
                b = i * 2;
                c = '*';
                int num = a * b;
                sprintf(buff[i], "%d %c %d = %d\n", a, c, b, num);
        }

        // 这一行把buff所有的内容都写到文件里面了,而里面大部分的内容都是'\0'
        fwrite(buff,1,sizeof(buff),file);

        fclose(file);
        return 0;
}

使用hexdump检查内容:

$ hexdump -C a.txt
每一行128字符(0x80),除了前面部分是可读文本,后面都是'\0'
image.png

$ vim a.txt

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏