繁体   English   中英

c将字符串传递给函数,然后返回字符串

[英]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;
}

上面的代码有什么问题?

一堆小东西:

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

  2. 您的getStr()在使用后定义。 您可能需要之前,它的定义移动到main()或前加一个原型main()

  3. 字符串文字如"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;
}

以下是旧问题的列表:

  1. 没有函数getStr的原型。
  2. 您无法执行printf(str),而需要“%s”作为附加参数。
  3. 您需要更改:new_str = getStr(&abc)更改为new_str = getStr(abc)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM