很抱歉,如果它太基本但我无法解决它。当我执行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
函数对checkConnection
和dataA
答案 0 :(得分:4)
strtok()
不会创建新的分配。 dataA
指向(过去)传入中第一个':' ,dataB
指向(过去一个)第二个':'是强>
strcpy(incoming, "connected")
指向)短于header
, strlen("connected")
将覆盖dataA(可能是dataB)
答案 1 :(得分:2)
答案 2 :(得分:2)
你的其他指针都指向同一个字符串incoming
的部分。请记住strtok
修改您传递给它的变量。
要解决此问题,只需使用incoming
将字符串strcpy
复制到另一个字符串中,然后将其他字符串用于strtok
操作