FATFS在SD卡里,写入多行数据出的问题

串口接收的数据存入数组,然后把数组截取有效部分,存入SD卡里的一行没有问题

但是从SD卡读出这一行之后,重新写入SD卡就有了问题,经过调试发现,错误在于 

一直是这一串数据,为什么会出错呢???

从数组中截取的部分命名为新数组  s[]

从SD卡中读取的部分为                  S[]

s[]  和 S[] 内容是一样的,但是 S[] 中多了一个

就是因为这个导致数据出错。错误现象::

 有很多次写SD卡的时候插回电脑会提示有错误,,,经过查看SD卡里会多出一些莫名奇妙的,看不见的字符

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

用一个指针p 指向数组S[]   然后就可以把数组里的英文变成字符串,然后用下面的函数进行写入

下面的函数是写入多行数据

//=================================================================================================
//函数名称: write_txt  写sd卡,用于从串口接收的:语言,机器码,能量组,写进txt中
//输入参数:         //1;传进来的参数是从串口过来的ASCII格式,但是中间用数组保存,之后用char*指针指向数组
//输出参数:         //  不知道写入sd卡的f_write()函数会把ASCII转换成什么格式
//函数功能: 写sd卡
//日    期: 2017-11-13
//作    者: GXTon
//=================================================================================================                                                    
void write_txt(char *name,char *number,char *zu,char *v)
{
    u8 n0,n1,n2,n3,n4,n5,n6,N;
    u8 res;  
    FIL *write;                                                             
    write=(FIL*)mymalloc(SRAMIN,sizeof(FIL));
    res=f_open(write,"0:/01.txt",FA_CREATE_ALWAYS|FA_WRITE);   //f_open函数每次打开都回到第一个字节处.
                                                                                                          //需要添加报错的 FA_OPEN_ALWAYS(有就打开)
    
    res=f_lseek(write,write->fsize);                                                      //将指针指向文件末
    res=res;
    n0=f_write(write,name , strlen((const char*)name), &bw);              //  写在txt文件的第一行
    
  n1=f_write(write, " ", sizeof(" ")-1, &bw);                                   //换行回车    只要我们每次写的时候有换行回车就行.
  n2=f_write(write,number , strlen((const char*)number), &bw);          //写入     
  n3=f_write(write, " ", sizeof(" ")-1, &bw);                                   //回车换行
  n4=f_write(write,zu , strlen((const char*)zu), &bw);                           //写入
    
    n5=f_write(write, " ", sizeof(" ")-1, &bw);                                //回车换行
  n6=f_write(write,v , strlen((const char*)v), &bw);                              //写入能量组号

    N=n0*n1*n2*n3*n4*n5*n6;
  if(N<1){}                                                                                           //先判断写是否成功??????
//        {
//                printf(" f_puts() fail.. ");
//        }else{
//                printf(" f_puts() success.. ");
//        }        
                
    f_close(write);
}

原文地址:https://www.cnblogs.com/chulin/p/9002521.html