0

我似乎在线上有语法错误

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

2 回答 2

0

我不知道是什么ftc,但你txt可能不会被'\0'终止,如果你想将它用作字符串,它必须被'\0'终止。

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

unsigned char textresult[20];

会是正确的。

另请注意,%cprintf需要单个char值时,您将指针传递给整个chars 序列,这是未定义的行为。您必须使用%s(并且为此txt必须'\0'终止)或者您通过 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

于 2018-03-05T15:21:06.723 回答
0

移动sprintf(...)声明变量的后面。

于 2018-03-05T14:57:21.550 回答