strcpy函数导致不需要的vars被修改

时间:2015-10-20 13:41:23

标签: c

很抱歉,如果它太基本但我无法解决它。当我执行app.get('/sites', function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); dbaccess.exec(query, writeResponse.bind(null, res)); }); 时,我会在更改后立即获得其他变量。

strcpy

然后incomingData填充数据和..

//global
char incomingData[250] = {0};   //data is never exceeds 50.

标记的行导致其他不相关的指针改变它们的值(该行之前的var和它之后的var)

handleIncomingData(incomingData); void handleIncomingData(char *incoming) { parseGetRespondHeader(incoming); //also strcpy strings into "incoming" char *header = strtok (incoming,":"); char *dataA=strtok (NULL, ":"); char *dataB=strtok (NULL, ":"); if(strstr(header, PROTOCOL_SET_WIFI_CONNECTION ) != NULL) { if(checkConnection(dataA,dataB)) strcpy(incoming,"connected"); // REMOVING THIS LINE SOLVES IT 函数对checkConnectiondataA

无效

3 个答案:

答案 0 :(得分:4)

strtok()不会创建新的分配。 dataA指向(过去)传入中第一个':' dataB指向(过去一个)第二个':'

如果您的第一个令牌(由strcpy(incoming, "connected")指向)短于header

strlen("connected")将覆盖dataA(可能是dataB)

答案 1 :(得分:2)

这些指针并非无关紧要。它们都指向字符串。

指针不会改变它们的值。但是如果你覆盖它们,那么它们指向的值很容易改变。

查看strtok

的文档

答案 2 :(得分:2)

你的其他指针都指向同一个字符串incoming的部分。请记住strtok修改您传递给它的变量。

要解决此问题,只需使用incoming将字符串strcpy复制到另一个字符串中,然后将其他字符串用于strtok操作