我正在用 C 语言编写一个函数,它将接受一个字符串并删除所有不是小写字母字符的字符。到目前为止,我已经编写了这段代码:
void strclean(char* str) {
while (*str) {
if (!(*str >= 'a' && *str <= 'z')) {
strcpy(str, str + 1);
str--;
}
str++;
}
}
当我将字符串“hello[][]world”传递给它时,该函数似乎主要工作,除了输出是:
hellowoldd
当我在它进入 if 语句的每一行之后打印它时,这是我收到的输出:
hello][]woldd
hello[]woldd
hello]woldd
hellowoldd
它似乎真的很接近,但我不明白为什么它会产生这个输出!最奇怪的部分是我把代码给了另外两个朋友,它在他们的电脑上运行良好。我们都在运行相同版本的 Linux(ubuntu 14.04.3),并且都使用 gcc 进行编译。
我不确定代码是否存在会导致输出不一致的问题,或者是否是编译器问题导致了问题。与他们的机器相比,也许它与我机器上的 strcpy 有关?