C中的sprintf(指向char元素数组的指针)

时间:2015-08-07 17:28:05

标签: c pointers

我是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)

2 个答案:

答案 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]分配内存;未签名的字符将不被接受