[英]c pass a string to function then return a string
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *abc = "abc";
char *new_str;
new_str = getStr(&abc);
printf("%s", abc);
}
char *getStr(char *str)
{
printf(str);
return str;
}
上面的代码有什么问题?
一堆小东西:
您正在将&abc
传递给getStr()
。 &abc
是指向保存字符串的变量的指针。 它的类型是指向指针的指针,并且与getStr()的char *str
参数不兼容。
您的getStr()
在使用后定义。 您可能需要之前,它的定义移动到main()
或前加一个原型main()
字符串文字如"abc"
为const char *
。 您正在定义类型为char *
的变量,该变量是可疑的(因为它将允许您修改字符串文字,但不允许这样做)。
这是一个工作版本:
#include <stdio.h>
#include <stdlib.h>
char *getStr(char *str);
int main(void)
{
char *abc = "abc";
char *new_str;
new_str = getStr(abc);
//printf("%s", *abc); don't really need this
}
char *getStr(char *str) {
printf("%s", str);
return str;
}
以下是旧问题的列表:
AC字符串是指向一个字符的指针,该字符以一个以空字节结尾的字符序列开头。 变量abc完全符合此定义。
另外,abc是指向字符的指针。 您正在传递abc的地址,即getStr将接收指向字符的指针的地址-因此getStr的唯一参数应为指向字符的指针的类型。 类型不匹配。
编辑:此外,getStr在声明之前被调用。 您的编译器可能允许这样做,但是出于许多原因,这是一种不好的做法。 您应先声明或定义它,然后再使用它。 如果您使用gcc作为编译器,请务必使用
gcc -ansi -Wall -pedantic
这三个标志将符合ANSI标准,并且可能因上述问题而大吼大叫或无法编译。
您的getStr函数带有一个char *,但这不是您要传递的内容-您传递的是指针的地址,而不是实际的指针。
更改:
new_str = getStr(&abc);
至:
new_str = getStr(abc);
而且我认为它会起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.