C18 sprintf() выдает синтаксическую ошибку
Кажется, у меня есть синтаксическая ошибка в строке
FSFILE *file;
в следующем коде после добавления строки sprintf(). Код работал до тех пор, пока я не добавил текст char, textresult и sprintf(). Я не могу понять, что с ним не так. Я использую компилятор C18. код предназначен для записи данных на SD-карту с использованием SPI. 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);
}
2 ответа
Я понятия не имею что ftc
делает, но ваш txt
не может быть '\0'
-определено, если вы хотите использовать его в качестве строки, оно должно быть '\0'
-завершённый.
Также ваш textresult
пустой массив, что, по вашему мнению, произойдет, если вы попытаетесь записать материал там, где нет свободного места?
unsigned char textresult[20];
было бы правильно.
Также обратите внимание, что %c
в printf
ожидает одного char
значение, вы передаете указатель на всю последовательность char
с, это неопределенное поведение. Вы должны либо использовать %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
вызов.
Переместить sprintf(...)
после того, как вы объявляете свои переменные.