【发布时间】:2018-03-05 14:55:56
【问题描述】:
我的行好像有语法错误
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()真的相关吗?不就是说你的编译器不支持在写了一些非声明语句后在函数中间声明变量吗? -
unsigned char textresult[]; sprintf(textresult, "%c%c", txt, text);未定义的行为!!!因为textresult没有分配!! -
textresult是一个空数组,你怎么能在一个空数组中写一些东西呢?txt也是一个指针,%c需要一个char -
PIC18 不是 8 位的吗?为什么在 8 位 MCU 上使用 sprintf?它不是 PC - 你只是炸毁了整个内存映射。如果您需要使用这样一个资源繁重的函数来复制 2 个字符串,而您甚至无法正确完成,那么这个项目就没有希望了。而是将其交给嵌入式系统程序员。