我正在编写一个函数eliminate(char *str, int character),该函数使用c字符串和要消除的字符作为输入,扫描str以查找character的实例,并用...替换当前索引处的值。我以为NULL,但是这似乎有风险,并且可能与依赖于c字符串中空终止符的其他函数混淆。例如:

char *eliminate(char *str, int character) {
    if (!str) return str;

    int index = 0;
    while (str[index])
       if (str[index] == character)
          str[index++] = '\0'; //THIS LINE IS IN QUESTION
    return str;
}


我的问题是,如何正确实现此功能,以便有效消除字符串中指定字符的所有实例?而且,如果适当的消除将'\0'分配给了要替换的字符,这如何不影响整个字符串(即,它实际上在遇到的第一个'\0'处结束)。例如,如果我要在同一字符串上运行两次以上函数,则第二次调用将仅检查直到替换最后一个字符的字符串。

最佳答案

如果您知道自己在做什么,可以使用这种替换。

仅当char缓冲区char *str是可写的(例如,由malloc动态分配,或者只是堆栈char str[SIZE]上的char数组)可写时,它才可以工作。它不适用于字符串文字。

标准功能strtok也以这种方式工作。顺便说一句,如果您要使用以空值结尾的子字符串,则可以在任务中使用strtok



对于charcter函数参数,使用整数类型是没有意义的:int character-> char character

关于c - 将NULL分配给C字符串的中间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32801225/

10-10 20:05
查看更多