我是C的新手,我想做像
这样的事情 uint8_t message[12];
message[0] = 0x00;
message[1] = 0x00;
message[2] = 0x00;
message[3] = 0x00;
message[4] = 0x00;
message[5] = 0x00;
message[6] = 0x00;
message[7] = 0x00;
message[8] = 0x00;
message[9] = 0x00;
message[10] = 0x00;
message[11] = 0x00;
sprintf(_smess,"AT$SS=%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
message[0], message[1], message[2], message[3],
message[4], message[5], message[6], message[7],
message[8], message[9], message[10], message[11]);
但是我不知道如何声明变量_smess,我已尝试使用char * _smess或uint8_t _smess [12],但无论如何我都遇到了错误
如果声明char _smess[43];
,那么我收到此错误:
Multiple markers at this line
- incompatible implicit declaration of built-in function 'sprintf' [enabled by
default]
- implicit declaration of function 'sprintf' [-Wimplicit-function-declaration]
- each undeclared identifier is reported only once for each function it
appears in
- '_smess' undeclared (first use in this function)
答案 0 :(得分:1)
根据传递给sprintf
的格式字符串(即42个字符),您知道字符串的大小,因此声明一个至少包含该大小的字符数组,确保为NUL留出空间({{ 1}})终止符:
'\0'
编辑:
内置函数' sprintf'"错误"不兼容的隐式声明是因为你没有char _smess[43];
位于文件的顶部。
&#34;&#39; _smess&#39;未申报&#34;错误很可能是因为您在使用它之前没有定义它。它需要出现在#include <stdio.h>
电话之前。
答案 1 :(得分:0)
int sprintf(char * buffer,const char * format,...);
我们必须分配内存的每个角色...在你的情况下
“AT $ SS =”需要6个字节,
%02x需要2个字节
每个字符之间的空白空间需要1byte
所需的总字节数为6 + 24 + 11 = 41个字节。
通过静态变量char _smess [41]或动态分配char * _smess = new char [41]分配内存;未签名的字符将不被接受