c语言strchr分段故障字符替换

时间:2011-08-22 22:23:29

标签: c string segmentation-fault strchr

我需要更换'&'的每一次出现在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是“优雅的”吗?...

问候。

4 个答案:

答案 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)