我似乎有语法错误
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
呼叫之前。