我正在尝试编写一个函数,该函数允许我在字符串"src"中找到子字符串"from",并在所有情况下将"from"子字符串替换为"to"子字符串,并通过"dest"输出新字符串
void find_replace(char* src, char* from, char* to, char* dest)
{
dest = (char * ) malloc(sizeof(src)+sizeof(from));
char * stringcomb;
int i;
int j;
stringcomb = strstr(src, from);
strncpy(stringcomb, to, strlen(to));
puts (src);
return ;
}
int main (int argc, char *argv[])
{
char* dest;
}
你对这段代码有多个问题:
- 当您在指针上
sizeof
时,您将获得指针的大小,而不是它指向的内容的大小/长度。如果要获取字符串的长度,请使用strlen
。 - 您忘记为终止
' '
字符分配空间。 - 如果像您一样,
to
比from
长怎么办?那么你将分配错误。 - C 中的参数是按值传递的,这意味着它们被复制,并且函数只有副本而不是原始副本。这会影响你的
dest
论点。若要模拟按引用传递,必须传递指针,在本例中为指向指针的指针。
最后:
- 在 C 中,您不应该强制转换
malloc
的返回。
只是吹毛求疵:
- 在返回
void
的函数末尾不需要显式return
语句,编译器会隐式处理它。