C++ 从url获取变量时遇到问题
我在从url提取get变量并将其打印到新行时遇到了问题,如:C++ 从url获取变量时遇到问题,c++,c,algorithm,network-programming,C++,C,Algorithm,Network Programming,我在从url提取get变量并将其打印到新行时遇到了问题,如: x=y z=hello 等等,但它会打印url中看似随机的部分,而不会在文件中添加换行符。一定有某种逻辑错误,但我就是看不出来 for(i_m=0;i_m<len_m;i_m++) { if(var_m[i_m]=='&') { fwrite(var_m+offset_m, 1, amp_m, echo_out); fputc('\n',echo_out); offset_m+=amp_m;
x=y
z=hello
等等,但它会打印url中看似随机的部分,而不会在文件中添加换行符。一定有某种逻辑错误,但我就是看不出来
for(i_m=0;i_m<len_m;i_m++) {
if(var_m[i_m]=='&') {
fwrite(var_m+offset_m, 1, amp_m, echo_out);
fputc('\n',echo_out);
offset_m+=amp_m;
amp_m=0;
}
amp_m++;
}
这会将&中的每一个都更改为一个换行符,然后我可以将var_m写入文件,但由于某种原因,这会导致缓冲区溢出。void StringExplode(std::string&str,const std::string&separator,std::vector*results){
void StringExplode(std::string &str, const std::string &separator, std::vector<string>* results){
int found;
found = str.find_first_of(separator);
while(found != string::npos){
if(found > 0){
results->push_back(str.substr(0,found));
}
str = str.substr(found+1);
found = str.find_first_of(separator);
}
if(str.length() > 0){
results->push_back(str);
}
}
int-found;
found=str.find_first_of(分隔符);
while(找到!=string::npos){
如果(发现>0){
结果->推回(str.substr(0,发现));
}
str=str.substr(发现+1);
found=str.find_first_of(分隔符);
}
如果(str.length()>0){
结果->推回(str);
}
}
您对偏移量和安培数的计算似乎是错误的。例如,简单字符串“a&b&c”-您的代码应该从该字符串输出文本:
a
b
c
但是如果你追踪代码,你会看到当你到达第一个&
然后偏移量m=0
和amp\u m=1
时,你会打印a
,这是可以的,但是当你到达第二个&
时,然后偏移量m=1
和amp\u m=2
,它们实际上会打印&b
,而且不会打印打印最后一个元素的点
使用像mysqlforums建议的简单字符串分割算法是处理此任务的常见方法,但我相信您应该能够想出一个简单的循环算法来满足您的需要。再想一想,试着在你的头脑中运行这个算法(或者用笔和纸),试着理解它是如何工作的——我相信你会明白的
如果您仍然有问题,请在此处发布一些信息,我将再次尝试提供帮助。您可以对代码进行更多注释吗?如果您的代码不起作用,并且没有任何注释解释变量是什么/意味着什么或一般想法是什么,那么发现错误可能会非常困难。这是一个逻辑错误(算法完全不起作用)还是一个编程错误(你没有正确编码你的设计)?
StringExplode(“a,b”,“,”,0)
bang,你死定了。使用引用,而不是指针;StringExplode(“a、b”、“x”、“b”和“x”);我知道它的用途。我是说你没有空的检查,而且这样的事情是完全不必要的。如果只是将参数作为引用,不仅可以简化函数内外的使用,还可以保证不会出现任何问题。
a
b
c