C 通过指针传递字符串-不兼容参数
我试图将两个字符串传递给一个函数,该函数将第二个字符串复制到第一个字符串中。获取错误消息C 通过指针传递字符串-不兼容参数,c,string,pointers,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>
"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;
}
进入
程序启动了。你真的想
CopyStrings(string1, string2)
它已经是char*
了,您正在用符号和从中生成char**
另一个问题是在您的函数中-应该是:
char* CopyStrings(char* string1, char* string2)
{
strcpy(string1, string2);
return string1;
}
(如果您想返回第一个字符串)。您真的想
CopyStrings(string1, string2)
它已经是char*
了,您正在用符号和从中生成char**
另一个问题是在您的函数中-应该是:
char* CopyStrings(char* string1, char* string2)
{
strcpy(string1, string2);
return string1;
}
(如果要返回第一个字符串)。更改
CopyStrings(&string1和&string2)
到
CopyStrings(string1、string2)
char*string1
,这里的string1
是一个指针,当您传递地址时,如果指针是指向指针的指针,则它不是您的意思,形式参数应该是双指针。只传递指针就足够了
CopyStrings()
函数需要在执行strcpy()后向调用者返回一个char*
字符串。这是修改后的 变化
CopyStrings(&string1和&string2)
到
CopyStrings(string1、string2)
char*string1
,这里的string1
是一个指针,当您传递地址时,如果指针是指向指针的指针,则它不是您的意思,形式参数应该是双指针。只传递指针就足够了
CopyStrings()
函数需要在执行strcpy()后向调用者返回一个char*
字符串。这是修改后的 OPs代码有几个问题:
在下面的代码中,大多数问题都被注释(并修复)
需要知道的一点是,在C语言中,数组名称降级为数组的地址。请尝试始终将指针传递给数组,而不是整个数组。%s
转换运算符希望关联的参数是字符数组的地址
#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
#包括
#包括
#包括
//获取两个字符串并将第二个字符串复制到第一个字符串中的函数
char*CopyStrings(char*string1,char*string2)
{
strcpy(string1、string2);
return string1;//返回到string1的指针
}
int main()
{
char*string1=malloc(10);//char总是1,所以不需要sizeof(char)
char*string2=malloc(10);
strcpy(string1,“ugabuga”);
strcpy(string2,“mukaluka”);
printf(“%s\n”,CopyStrings(string1,string2));
自由(1);
自由(2);
返回0;
}//结束函数:main
OPs代码有几个问题:
在下面的代码中,大多数问题都被注释(并修复)
需要知道的一点是,在C语言中,数组名称降级为数组的地址。请尝试始终将指针传递给数组,而不是整个数组。%s
转换运算符希望关联的参数是字符数组的地址
#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
#包括
#包括
#包括
//获取两个字符串并将第二个字符串复制到第一个字符串中的函数
char*CopyStrings(char*string1,char*string2)
{
strcpy(string1、string2);
return string1;//返回到string1的指针
}
int main()
{
char*string1=malloc(10);//char总是1,所以不需要sizeof(char)
char*string2=malloc(10);
strcpy(string1,“ugabuga”);
strcpy(string2,“mukaluka”);
printf(“%s\n”,CopyStrings(string1,string2));
自由(1);
自由(2);
返回0;
}//结束函数:main
不要在C中强制转换malloc
。另外,通过在函数调用中执行&string1
,您显然是在询问char*
的地址,这传递了一个char**
。啊,这是真的。你能解释一下为什么我不应该在这里使用malloc吗?使用malloc!=演员马洛克。不需要施放malloc,iirc会抑制某种警告,但我不太确定。这是不鼓励的。@Yíu您不应该从malloc
强制转换结果,因为如果您忘记包含头,它将使您的代码编译(可能会严重崩溃)。(在这种情况下也不需要使用,因为您可以只编写char string1[10];
并摆脱免费
)。嗯,好的。但在本例中,我认为转换malloc是可以的,因为如果我排除函数/*并只打印我的字符串,程序运行良好。不要在C中转换malloc
。另外,您显然是通过在函数调用中执行&string1
来请求char*
的地址,这传递了一个char**
。啊,这是真的。你能解释一下为什么我不应该在这里使用malloc吗?使用malloc!=演员马洛克。不需要施放malloc,iirc会抑制某种警告,但我不太确定。这是不鼓励的。@Yíu您不应该从malloc
强制转换结果,因为如果您忘记包含头,它将使您的代码编译(可能会严重崩溃)。(在这种情况下也不需要使用,因为您可以只编写char string1[10];
并摆脱免费
)。嗯,好的。但在这个例子中,我认为转换malloc是可以的,因为如果我排除函数/*并只打印我的字符串,程序运行良好。好的,谢谢。我已经改变了,但程序仍然崩溃/好的,谢谢。我已经改变了,但程序仍然崩溃/谢谢你的帮助,谢谢。但是,既然一个字符指针等于一个数组,那么为它分配内存是有意义的——还是我错了?@Yiu,你是对的。无论是char数组还是指向char的指针,内存分配都是必须的,但第一种情况可以是编译时,然后在运行时分配。感谢您的帮助,非常感谢。但是,既然一个字符指针等于一个数组,那么为它分配内存是有意义的——还是我错了?@Yiu,你是对的。无论是字符数组还是指向字符的指针,内存分配都是m