OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2942|回复: 6

求解! fatfs文件系统,f-read函数怎么每次会比f-write函数写入的多输出一个“?”

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-6-17
在线时间
2 小时
发表于 2020-6-17 15:16:46 | 显示全部楼层 |阅读模式
1金钱
const char writeBuf[]="文件写入例子!";
char readBuf[4096]="";

写入的就是这个字符串          "文件写入例子!"
但为什么读取的时候是          “文件写入例子!
会多这样一个问号呢

还有就是当我 char readBuf[4096]="啊啊";
随便给接收的readBuf赋一个初始值的时候,就不会出现这个问号了,这是什么原理,求解答!

代码如下:

#include "stm32f10x.h"
#include "./usart/bsp_usart.h"
#include "./led/bsp_led.h"
#include "./flash/bsp_spi_flash.h"
#include "ff.h"
FATFS fsObejct;
FIL fp;
const char writeBuf[]="文件写入例子!";
char readBuf[4096]=" ";
UINT bw;
UINT br;

int main(void)
{        
        FRESULT res;
       
        LED_GPIO_Config();
        LED_BLUE;
  USART_Config();


        res = f_mount(&fsObejct,"1:",1);
        printf("\n\t rse = %d",res);
       
        if(res == FR_NO_FILESYSTEM)
        {
                res = f_mkfs("1:",0,0);
                printf("res2 = %d",res);
       
                res = f_mount(NULL,"1:",1);
                res = f_mount(&fsObejct,"1:",1);
                printf("res3 = %d",res);
        }
       
        res = f_open(&fp,"1:abcd.txt",FA_OPEN_ALWAYS|FA_WRITE|FA_READ);
        if(res == FR_OK)
        {
                res = f_write (&fp,writeBuf,sizeof(writeBuf),&bw);
                        printf("\r\n bw = %d , wirtBuf = %s",bw,writeBuf);
                if(res == FR_OK)
                {
               
                        f_lseek(&fp,0);
                        res = f_read(&fp,readBuf,f_size(&fp),&br);
                        if(res == FR_OK)
                        {
                                printf("\r\n br = %d , readBuf = %s",br,readBuf);
                        }
                        f_close(&fp);
                }

        }
}

大神帮帮忙!


最佳答案

查看完整内容[请看2#楼]

sizeof(writeBuf)改成strlen(writeBuf)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2020-6-17 15:16:47 | 显示全部楼层
sizeof(writeBuf)改成strlen(writeBuf)
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-6-17
在线时间
2 小时
 楼主| 发表于 2020-6-17 15:17:16 | 显示全部楼层
迷惑一下午了,救救孩子!
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2020-6-17 15:55:04 | 显示全部楼层
sizeof(writeBuf)????
你确定你这里想用的是这个
一分耕耘一分收获。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-6-17
在线时间
2 小时
 楼主| 发表于 2020-6-18 10:32:42 | 显示全部楼层
憨厚诚实大叔 发表于 2020-6-17 15:16
sizeof(writeBuf)改成strlen(writeBuf)

{16981FFE-5F2F-4A50-8435-992982DBEEFB}_20200618102953.jpg
哥,我改成strlen后,还会多出一个问号
之前用sizeof,bw和br(写入和读取的长度)也都是15,也有问号
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-6-17
在线时间
2 小时
 楼主| 发表于 2020-6-18 10:34:50 | 显示全部楼层
yklstudent 发表于 2020-6-17 15:55
sizeof(writeBuf)????
你确定你这里想用的是这个

我定义的数组是char型的嘛,sizeof(writeBuf)返回的值应该就是writeBuf的数组长度吧。。我这样理解对吗
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2020-6-18 11:28:30 | 显示全部楼层
applezbn 发表于 2020-6-18 10:34
我定义的数组是char型的嘛,sizeof(writeBuf)返回的值应该就是writeBuf的数组长度吧。。我这样理解对吗

C语言学习不合格,建议回去重新复习下
一分耕耘一分收获。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 08:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表