我需要更换'&'的每一次出现在C字符串中的','。
我做了这个并且有效
代码1:
char *val, *querydup;
.
.
.
val=strchr(querydup,'&');
while(val != NULL) {
*val=',';
val=strchr(querydup,'&');
}
为了“优雅”我尝试了以下内容,但它导致了seg错误,直到我的指针光标都被破坏了!很奇怪,我在vmware vm中运行linux。
代码2:
while(val=strchr(querydup,'&') != NULL) {
*val=',';
}
那可能是什么错误?..
您认为代码1是“优雅的”吗?...
问候。
答案 0 :(得分:6)
has been answered的主要问题emboss。
我正在回答“优雅”部分:)
你一遍又一遍地检查相同的字符。
假设querydup
有"&&&&&&&&&&"
。在最初的几次更改后,它有",,,,,,&&&&"
,但您仍然可以从头开始检查。
尝试重复使用val
代表“优雅”:)
val = strchr(val, '&');
答案 1 :(得分:4)
这是operator precedence,请尝试
while((val=strchr(querydup,'&')) != NULL) {
*val=',';
}
答案 2 :(得分:3)
也许更简单的解决方案是实际手动执行:
char *ptr = querydup;
while (*ptr) {
if (*ptr == '&') {
*ptr = ',';
}
ptr++;
}
这是更多的代码行,但它只通过字符串一次,其中strchr()的重复执行将多次遍历字符串。
答案 3 :(得分:1)
您正在为val赋值一个布尔值。您的代码相当于:
while(val = (strchr(querydup,'&') != NULL))
将其更改为:
while((val = strchr(querydup,'&')) != NULL)