我想替换ANSI C字符串中的所有“a”字符。下面是我的代码:

#include <stdio.h>
#include <stdlib.h>

void sos(char *dst){
    while(*dst){
        if(*dst == 'a')
        *dst = '\0';
        dst++;
        }
}


int main(void){
    char str[20] = "pasternak";
    sos(str);
    printf("str2 = %s \n", str);
    return 0;
}

当我运行它时,结果是:
str2 = p

但应该是
str2 = psternk

它可以与其他字符(如“b”等)配合使用。我试图将空值赋给*dst,但在编译期间出错。
现在如何删除“a”字符?

最佳答案

'\0'是C语言工具识别字符串结尾的方式。为了实际删除一个字符,您需要向前移动所有后续字符。

void sos(char *dst) {
  int offset = 0;
  do {
    while (dst[offset] == 'a') ++offset;
    *dst = dst[offset];
  } while (*dst++);
}

关于c - 如何在ANSI C中用NULL替换字符串中的字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20031548/

10-13 07:31