繁体   English   中英

c语言strchr分割错误字符替换

[英]c language strchr segmentation fault character replace

我需要将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“优雅”?...

问候。

您的主要问题已由 emboss 回答

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

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

假设querydup具有"&&&&&&&&&&" 经过前几处更改后,其显示为",,,,,,&&&&" ,但是您仍然还是要从头开始检查。

尝试将val重复用于“优雅” :)

val = strchr(val, '&');

这是运算符的优先级 ,请尝试

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

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

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

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

您正在为val分配布尔值。 您的代码等效于:

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

更改为:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM