首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C18 sprintf()给出语法错误

C18 sprintf()给出语法错误
EN

Stack Overflow用户
提问于 2018-03-05 22:55:56
回答 2查看 299关注 0票数 0

我的线路上似乎有一个语法错误

代码语言:javascript
复制
FSFILE *file; 

在下面的代码中添加sprintf()行之后。代码一直在运行,直到我添加了char text、textresult和sprintf()。我似乎找不到它出了什么问题。我使用的是C18编译器。该代码用于使用SPI将数据写入SD卡。char txt[]是使用温度传感器测量得到的值,例如: 23,5。但我想在其中添加更多文本。目标是每隔5分钟在SD卡上存储一个测量值,以及一个时间戳或其他东西。我用的是PIC18f27j53。

代码语言:javascript
复制
void writeFile()
{
    unsigned char txt[]={ftc(result,0),ftc(result,1),0x2C,ftc(result,3)};
    unsigned char text[]= "hello";  
    unsigned char textresult[];   
    sprintf(textresult, "%c%c", txt, text); 
    //unsigned char size = sizeof(result)-1;
    FSFILE *file;
    file = FSfopenpgm("DATA.TXT", "w");
    if(file == NULL)while(1);
    if(FSfwrite((void *) txt, 1, 4, file)!=4)while(1);
    if(FSfclose(file)!=0)while(1);
}
EN

回答 2

Stack Overflow用户

发布于 2018-03-05 22:57:22

sprintf(...)移到声明变量的位置之后。

票数 0
EN

Stack Overflow用户

发布于 2018-03-05 23:21:07

我不知道ftc是做什么的,但你的txt可能不是'\0'-terminated,如果你想把它用作字符串,它必须是'\0'-terminated。

而且你的textresult是一个空数组,如果你在没有可用空间的地方写东西,你期望会发生什么呢?

代码语言:javascript
复制
unsigned char textresult[20];

都是正确的。

还要注意,printf中的%c只需要一个char值,您传递的是一个指向整个char序列的指针,这是未定义的行为。您必须使用%s (对于此txt,必须为'\0'-terminated),或者传递txt[0],即单个char

代码语言:javascript
复制
sprintf(textresult, "%c%c", txt[0], text); 

// or

unsigned char txt[]={ftc(result,0),ftc(result,1),0x2C,ftc(result,3), 0};
...
sprintf(textresult, "%s%c", txt, text); 

如果编译器希望在函数的开头声明所有变量,请将

代码语言:javascript
复制
FSFILE *file;

sprintf调用之前。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49113214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档