C18 sprintf()给出语法错误[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C18 sprintf()给出语法错误[重复]相关的知识,希望对你有一定的参考价值。

我似乎在线上有语法错误

FSFILE *file; 

在添加sprintf()行后的以下代码中。代码工作直到我添加了char文本,textresult和sprintf()。我似乎无法找出它的错误。我正在使用C18编译器。代码用于使用SPI将数据写入SD卡。 char txt []是带温度传感器的测量值,例如:23,5。但我想为此添加更多文字。目标是每隔5分钟在SD卡上存储一个测量值,以及时间戳等。我正在使用PIC18f27j53。

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);
}
答案

在声明变量的位置后移动sprintf(...)

另一答案

我不知道ftc做了什么,但你的txt可能不是''终止,如果你想用它作为一个字符串,它必须是''终止。

另外你的textresult是一个空数组,如果你试图在没有可用空间的地方写东西,你会发生什么?

unsigned char textresult[20];

会是对的。

另请注意,%c中的printf期望单个char值,您正在传递指向整个chars序列的指针,这是未定义的行为。你必须要么使用%s(并且为此txt必须是''终止)或者你传递txt[0],单个char

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); 

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

FSFILE *file;

sprintf电话之前。

以上是关于C18 sprintf()给出语法错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO准备语句给出“无效语法”错误[重复]

SpyderKernelAppn警告 |没有这样的通讯:2ed06aee37e411eb867974e5f9ff3c18(OPENCV)[重复]

为啥这个javascript代码给出错误[重复]

sdcc 在 keil 中工作的代码上给出语法错误

Magento 2 模板文件夹中的 PHP 代码给出语法错误

PyQt5在执行示例代码后给出错误代码[重复]