我正在编写一个函数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/