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
值,您正在传递指向整个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
电话之前。
以上是关于C18 sprintf()给出语法错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章
SpyderKernelAppn警告 |没有这样的通讯:2ed06aee37e411eb867974e5f9ff3c18(OPENCV)[重复]