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

时间:2015-01-21 15:19:20

标签: c string pointers

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

"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)
程序崩溃了。

3 个答案:

答案 0 :(得分:3)

你真的想要

CopyStrings(string1, string2)

已经char*了,你用&符号制作了char**

另一个问题在于你的功能 - 它应该是:

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

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

答案 1 :(得分:1)

更改

CopyStrings(&string1, &string2)

CopyStrings(string1, string2)

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

CopyStrings()函数需要在对调用者执行strcpy()后返回char *字符串。这是修改后的code

答案 2 :(得分:1)

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