c传递一个字符串to function然后返回一个字符串

时间:2010-11-01 01:45:23

标签: c

#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;
}

上面的代码出了什么问题?

4 个答案:

答案 0 :(得分:6)

一堆小东西:

  1. 您已将&abc传递给getStr()&abc是指向保存字符串的变量的指针。它的类型是一个指向指针的指针,它与getStr()的char *str参数不兼容。

  2. 您的getStr()在使用后定义。您需要将其定义移至main()之前或在main()之前添加原型。

  3. "abc"等字符串文字的类型为const char *。您正在定义类型char *的变量,这是可疑的(因为它允许您修改字符串文字,这是不允许的。)

答案 1 :(得分:3)

这是一个工作版本:

#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;
}

以下是旧问题的列表:

  1. 您的函数getStr没有原型。
  2. 你不能做printf(str)你需要一个“%s”作为额外的参数。
  3. 您需要更改:new_str = getStr(&amp; abc)to new_str = getStr(abc)

答案 2 :(得分:2)

C字符串是指向一个字符的指针,该字符以一个以空字节结尾的字符序列开始。变量abc完全符合这个定义。

此外,abc是指向字符的类型指针。您正在传递abc的地址,即getStr将接收指向字符的指针的地址 - 因此getStr的唯一参数应该是指向字符指针的类型指针。类型不匹配。

编辑:此外,getStr在声明之前被调用。您的编译器可能允许这样做,但由于许多原因这是不好的做法。您应该在使用之前声明它或定义它。如果您使用gcc作为编译器,请始终使用

gcc -ansi -Wall -pedantic

这三个标志符合ANSI标准,它会因上述问题而对你大喊大叫或不编译。

答案 3 :(得分:0)

你的getStr函数接受一个char *,但这不是你传递的东西 - 你传递的是指针的地址,而不是传递实际的指针。

变化:

new_str = getStr(&abc);

为:

new_str = getStr(abc);

我认为它会起作用。