1

我需要将 C 字符串中每次出现的 '&' 替换为 ','。

我这样做了,它有效

代码 1:

char *val, *querydup;
.
.
.
val=strchr(querydup,'&');
while(val != NULL) {
*val=',';
val=strchr(querydup,'&');
}

为了变得“优雅”,我尝试了以下操作,但它导致了段错误,甚至我的指针光标都被破坏了!很奇怪,我在 vmware vm 中运行 linux。

代码 2:

while(val=strchr(querydup,'&') != NULL) {
*val=',';
}

那么可能有什么问题呢?...

您认为代码 1 是“优雅的”吗?...

问候。

4

4 回答 4

6

您的主要问题已由emboss回答。

我正在回答“优雅”部分:)

你一遍又一遍地检查相同的字符。

假设querydup"&&&&&&&&&&"。在最初的几次更改之后",,,,,,&&&&",您仍然从头开始检查。

尝试重新使用val“优雅”:)

val = strchr(val, '&');
于 2011-08-22T22:32:18.417 回答
4

这是运算符优先级,试试

while((val=strchr(querydup,'&')) != NULL) {
    *val=',';
}
于 2011-08-22T22:26:52.800 回答
3

也许更简单的解决方案是手动进行:

char *ptr = querydup;
while (*ptr) {
    if (*ptr == '&') {
        *ptr = ',';
    }
    ptr++;
}

这是更多的代码行,但它只遍历字符串一次,其中 strchr() 的重复执行将多次遍历字符串。

于 2011-08-22T22:28:49.997 回答
1

您正在为 val 分配一个布尔值。您的代码相当于:

while(val = (strchr(querydup,'&') != NULL))

将其更改为:

while((val = strchr(querydup,'&')) != NULL)
于 2011-08-22T22:28:54.897 回答