【问题标题】:How to make return char function in c programming? [duplicate]如何在c编程中制作返回字符函数? [复制]
【发布时间】:2019-02-08 01:04:39
【问题描述】:

我正在尝试做一些简单的 c 编程来返回 char 值。程序运行没有错误,但没有出现预期字符串的输出。当我运行它时,我期望它会返回Halloworld

#include <stdio.h>
#include <string.h>

char screen(char c[]);

int main(){

    char b[] = "Hallo";
    //screen(b);
    printf("%s",screen(b));
}

char screen(char c[]){

    strcat(c, "world");
    return c;
}

【问题讨论】:

  • 那个程序还能编译吗?您似乎正在尝试从 char[]char 的隐式转换,我预计会出现编译时错误。
  • 更重要的是:b 是一个常量对象,没有足够的空间来添加更多数据,这意味着这个程序是未定义的行为,任何事情都可能发生,什么都没有。
  • 是的,程序已编译,但它在'screen'函数警告中给出这样的警告:return make integer from pointer without a cast [-Wint-conversion]
  • 这是一个非常重要的警告! (并且您可能应该使用-Wall -Werror 或编译器中的任何等效项进行编译:不要只是忽略这样的编译器警告。)如果您不理解该警告,那么这本身就是一个好问题(但我很确定它已经在这里某个地方被彻底询问和回答了)。
  • @WanAfifiWanZain 我的回复能解决你的问题吗?欢迎提出更多问题。

标签: c


【解决方案1】:

strcat() 的声明返回一个指向 char (char *) 的指针。所以你的函数screen()也必须。

另一件事是,你不能这样做char b[] = "Hallo";,因为这样字符数组b 只够处理Hallo。您需要它大于Hallo,其余部分将填充0x00NUL。像这样:

48 61 6C 6C 6F 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00

然后在你 strcat() 之后,字符 world 到最后:

48 61 6C 6C 6F 20 77 6F 72 6C 64 00 00 00 00 00 00 00 00 00

当传递给printf() 时,0x00 剩下的第一个将充当空终止符。

#include <stdio.h>
#include <string.h>

char* screen(char c[])
{
    strcat(c, "world");
    return c;
}

int main()
{
    char b[20] = "Hallo ";
    screen(b);
    printf("%s",b);

    return 0;
}

【讨论】:

  • 我可以知道为什么我们必须把指针放在函数上吗?而 'int function' 或 'float function' 不用在函数上使用指针就可以了。
  • @Wan:因为int 只是int,但字符串(字符数组)不仅仅是char。 C 中的约定是使用指向字符串第一个字符的指针来表示字符串。
猜你喜欢
  • 1970-01-01
  • 2016-08-13
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
相关资源
最近更新 更多