C语言 C18 sprintf() 给出语法错误



我似乎有语法错误

FSFILE *file; 

在下面的代码中添加 sprintf(( 行后。代码一直工作到我添加了字符文本,文本结果和sprintf((。我似乎无法找出它有什么问题。我正在使用 C18 编译器。该代码用于使用 SPI 将数据写入 SD 卡。字符 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值,则传递的是一个指向整个 char S 序列的指针,这是未定义的行为。你必须要么使用%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呼叫之前。

最新更新