字符串副本 - 基础知识

时间:2015-10-10 12:22:12

标签: c arduino

这段代码好吗?

void function (char* reqData) {
    char serverData[130]={0};
    uint8_t buffer[128] = {0};
    uint32_t len = wifi.recv(&mux_id, buffer, sizeof(buffer), 100);

    //fill the serverData in some for loop
     for(uint32_t i = 0; i < len; i++) 
           serverData[i]=(char)buffer[i];

    serverData[len ] = '\0';
    strcpy(reqData,serverData);       // * my concern !
}

并且主要使用:

//some global var
char *incomingData={0};

//then 

function(incomingData);

它导致我无法解释的问题(硬件上的奇怪崩溃)

1 个答案:

答案 0 :(得分:2)

好吧

strcpy(reqData,serverData);       // * my concern !

reqData指向incomingData指向的位置:

char *incomingData={0};

但是你没有正确地初始化incomingData,它没有指向你可以写东西的记忆。另外= {0}指针的初始化对我来说似乎有点奇怪。如果您事先了解尺寸,可以将其初始化如下所示。

char incomingData[SIZE] = {0};

内部功能:

char serverData[130]={0};

serverData长度为130,请注意缓冲区溢出,如果在下一行接收到大于130的数据会怎样?