返回类型无效。还需要我的功能帮助

时间:2015-01-26 12:47:41

标签: c arrays string pointers void

我试图编写一个函数,允许我找到一个子串"来自"在一个字符串" src"中,并替换"来自"子串与"到"在所有情况下都是子串,并通过" dest";输出新字符串。但是我认为我的代码看起来有点不确定,而且我不理解(概念上)如何返回带有dest的输出,因为输出的类型为void。我想知道是否有人可以提供一些帮助?我不知道如何通过dest输出...而且我一直收到10号巴士错误。

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;
   find_replace("I hate this project", "hate", "not hate", dest);
}

1 个答案:

答案 0 :(得分:3)

这段代码存在多个问题:

  • 当您对指针执行sizeof时,您将获得指针的大小,而不是指向它的大小/长度。如果您想获得字符串的长度,请使用strlen
  • 您忘记为终止'\0'字符分配空间。
  • 如果您的情况to长于from,该怎么办?然后你会分配错误。
  • C中的参数按值传递,这意味着它们被复制,并且该函数只包含副本而不是原始副本。这会影响您的dest参数。要通过引用模拟传递,必须传递一个指针,在您的情况下是一个指向指针的指针。

最后:

只是为了挑剔:

  • 在返回return的函数末尾不需要显式void语句,编译器将隐式处理它。