通过指针传递字符串 - 不兼容的参数
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
我试图将两个字符串传递给一个函数,该函数将第二个字符串复制到第一个字符串中。获取错误消息
"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