C 返回类型为void。我的工作也需要帮助

C 返回类型为void。我的工作也需要帮助,c,arrays,string,pointers,void,C,Arrays,String,Pointers,Void,我正在尝试编写一个函数,该函数允许我在字符串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 =

我正在尝试编写一个函数,该函数允许我在字符串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。 您忘记为终止的“\0”字符分配空间。 如果像您的情况一样,to比from长怎么办?那你就错了。 C中的参数是按值传递的,这意味着它们是复制的,函数只有副本而没有原始副本。这会影响你的目标论点。要模拟按引用传递,必须传递一个指针,在本例中是指向该指针的指针。 最后:

只是吹毛求疵:

在返回void的函数末尾不需要显式的return语句,编译器将隐式处理它。
SizeOffsrc+sizeofform是错误的,假设src字符串中出现了n个to,并且sizeof没有给出字符串的长度,并且您仍然缺少用于终止“\0”的空间,则问题太多。。。几分钟前你问了几乎相同的问题。明白了,所以我把它调到strlenstrc+strlenfrom。这会有很大的不同吗?你的代码无法编译。缺少一个}。另外,dest没有使用。希望你能帮助我,但我在想,我没有这样做,因为我不太确定。。。我可以做dest=strstrsrc,从;stringcpydest、to、strlento;把src;对不起,我忘了提供允许我们假设to的长度不超过from。将sizeof更改为lengthof,并对“\0”进行了解释。你能再详细阐述一下你的第四点吗?非常感谢。你能详细解释一下C点中的论点吗?谢谢大家!@LeehoLim如果函数中的参数dest是一个副本,并且您更改了它,那么您只更改了副本,而不是原始副本。如果你只是搜索一下,这里和其他地方有成千上万的关于通过引用传递指针的问题。