字符串引用未在C中的函数调用中更新
发布时间:2020-12-16 09:25:49 所属栏目:百科 来源:网络整理
导读:我正在写一个arduino库来在网上发布http请求. 我正在使用http://arduino.cc/en/Tutorial/TextString的String类 当我在函数调用后引用我定义的字符串对象时,我的代码表现得很奇怪. 实际上,我试图获取我的GET请求的主体并从http GET请求的响应中删除http标头.
我正在写一个arduino库来在网上发布http请求.
我正在使用http://arduino.cc/en/Tutorial/TextString的String类 当我在函数调用后引用我定义的字符串对象时,我的代码表现得很奇怪. 实际上,我试图获取我的GET请求的主体并从http GET请求的响应中删除http标头. 以下是描述: 方法调用: String body; if(pinger.Get(host,path,&body)) { Serial.println("Modified String Outside :"); Serial.println(body); Serial.println(); Serial.println("Modified String Outside Address"); Serial.println((int)&body); } 产量 Modified String Outside : HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/html Content-Length: 113 Date: Wed,13 Jan 2010 14:36:28 GMT <html> <head> <title>Ashish Sharma </title> </head> <body> Wed Jan 13 20:06:28 IST 2010 </body> </html> Modified String Outside Address 2273 方法描述: bool Pinger::Get(String host,String path,String *response) { bool connection = false; bool status = false; String post1 = "GET "; post1 = post1.append(path); post1 = post1.append(" HTTP/1.1"); String host1 = "Host: "; host1 = host1.append(host); for (int i = 0; i < 10; i++) { if (client.connect()) { client.println(post1); client.println(host1); client.println(); connection = true; break; } } int nlCnt = 0; while (connection) { if (client.available()) { int c = client.read(); response->append((char) c); if (c == 0x000A && nlCnt == 0) { nlCnt++; if (response->contains("200")) { status = true; continue; } else { client.stop(); client.flush(); break; } } } if (!client.connected()) { client.stop(); connection = false; } } response = &response->substring(response->indexOf("nrn"),response->length()); Serial.println("Modified String: "); Serial.println(*response); Serial.println(); Serial.print("Modified String Address: "); Serial.println((int)&response); return status; } 输出: Modified String: ? <html> <head> <title>Ashish Sharma </title> </head> <body> Wed Jan 13 20:06:28 IST 2010 </body> </html> Modified String Address: 2259 从示例中可以看出,字符串引用对象在Get方法中给出了正确的字符串,但是当Get方法返回时,字符串内容的引用会发生变化. 解决方法
如果我理解你的代码,你可能会想要做这样的事情:
*response = response->substring(response->indexOf("nrn"),response->length()); 代替 response = &response->substring(response->indexOf("nrn"),response->length()); 也可能没有必要传入指针(引用可能会使代码看起来更好). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |