该功能有什么问题?
char printThis()
{
char str[20] = "This is a string";
return str;
}
我收到警告:不兼容的指向整数转换的指针从结果类型为char的函数返回'char [20]'
答案 0 :(得分:6)
我可以看到三个问题:
char*
,但声明该函数返回char
。后者只是一个字符而不是字符串。void
明确声明不接收任何内容。像这样修复:
char* printThis(void)
{
char* str = strdup("This is a string");
return str;
}
这里我使用strdup
在堆上分配字符串。如果你真的想要一个长度为20个字符的缓冲区,那么你需要使用malloc()
后跟strcpy()
。无论哪种方式,释放返回字符串的责任都会传递给调用者。
答案 1 :(得分:2)
您宣布您的函数返回char
,但您想要返回char[]
来解释您的警告。
更改您的函数声明以返回char*
此外,您将返回一个指针本地分配的变量(str
),因此指针将指向一个不存在的变量。
您必须使用malloc
手动分配字符串,或者使用strdup
更好地分配字符串,然后将其返回。
不要忘记free
分配的指针!
Strdup:http://pubs.opengroup.org/onlinepubs/007904875/functions/strdup.html
答案 2 :(得分:2)
认为返回类型应为char*
而不是char
像这样:
char* printThis()
{
static char str[20] = "This is a string";
return (char*)str;
}
答案 3 :(得分:0)
因为char
实际上是整数类型而char []
实际上是指针(char *)。
将您的声明更改为char *
。
答案 4 :(得分:0)