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



我正在尝试将两个字符串传递给将第二个字符串复制到第一个字符串中的函数。获取错误消息

"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;
}

(如果要返回第一个字符串)。

OPs 代码存在几个问题:

在下面的代码中,大多数问题都被注释(并修复)要知道的一件事是,在 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("%sn", CopyStrings(string1, string2));
  free(string1);
  free(string2);
  return 0;
} // end function: main

更改

CopyStrings(&string1, &string2)

CopyStrings(string1, string2)

char* string1,这里string1是一个指针,当你传递地址if指针时,它是指针到指针,这不是你的意思,正式参数应该是双指针。仅传递指针就足够了。

CopyStrings()函数需要在向调用方执行 strcpy() 后返回一个char *字符串。这是修改后的代码。

最新更新