通过指针传递字符串 - 不兼容的参数

Passing string via pointer - incompatible argument

我试图将两个字符串传递给一个函数,该函数将第二个字符串复制到第一个字符串中。获取错误消息

"passing arguement 1/2 of 'CopyStrings'from incompatible pointer type - line 25.
note: expected 'char*' but argument is of type 'char**' - line 8

这是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// a function that gets 2 strings and copies the second one into the first one


char CopyStrings(char* string1, char* string2)
{
  strcpy(string1, string2);

  return *string1;

}

int main()
{
  char* string1 = (char*)malloc(sizeof(char)*10);
  char* string2 = (char*)malloc(sizeof(char)*10);

  strcpy(string1, "ugabuga");
  strcpy(string2, "mukaluka");


  printf("%s", CopyStrings(string1, string2));


  free(string1);
  free(string2);
  return 0;

}

对我搞砸了什么以及如何正确编写指针有什么建议吗?

编辑 - 现在我改变了

(&string1, &string2)

进入

(string1, string2)

程序崩溃。

你真的想要

CopyStrings(string1, string2)

它已经是 char*,您正在用 & 符号从中生成 char**

另一个问题在你的函数中 - 它应该是:

char* CopyStrings(char* string1, char* string2)
{
    strcpy(string1, string2);
    return string1;
}

(如果你想return第一个字符串)。

改变

CopyStrings(&string1, &string2)

CopyStrings(string1, string2)

char* string1,这里 string1 是一个指针,当你传递地址时,如果指针是指向指针的指针,它不是你的意思,形式参数应该是双指针。只传递指针就足够了。

CopyStrings() 函数需要 return 一个 char * 字符串在执行 strcpy() 后给调用者。这是修改后的code

OP 代码存在几个问题:

在下面的代码中,大部分问题都已注释(并已修复) 需要知道的一件事是,在 C 中,数组名称退化为数组地址 尝试始终将指针传递给数组而不是完整数组 %s 转换运算符期望关联参数是 char 的地址数组。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// a function that gets 2 strings and copies the second one into the first one


char* CopyStrings(char* string1, char* string2)
{
  strcpy(string1, string2);
  return string1; // return pointer to string1
}

int main()
{
  char* string1 = malloc(10);  // char is always 1 so no need for sizeof(char)
  char* string2 = malloc(10);

  strcpy(string1, "ugabuga");
  strcpy(string2, "mukaluka");

  printf("%s\n", CopyStrings(string1, string2));

  free(string1);
  free(string2);
  return 0;
} // end function: main