gpt4 book ai didi

c - 将 NULL 分配给 c 字符串的中间

转载 作者:行者123 更新时间:2023-11-30 19:42:06 26 4
gpt4 key购买 nike

我正在编写一个函数 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 *str 可写时(动态分配,例如通过 malloc 分配,或者只是堆栈上的 char 数组 char str),它才可以工作[尺寸])。它不适用于字符串文字。

标准函数strtok也以这种方式工作。顺便说一句,如果您想要以 null 结尾的子字符串,您可能可以使用 strtok 来完成您的任务。

<小时/>

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com