c - 从函数返回一个字符串

标签 c string return

为什么我得到错误的输出

输出: 输入你的名字: 绍拉夫 你的名字是sa-(

#include <stdio.h>
#include <conio.h>

char * func();
int main()
{
    printf("Your name is %s\n",func());
    return 0;
}

char* func()
{
    char L[10];
    printf("Enter ur name:\n");
    gets(L);
    return L;
}

最佳答案

您不能返回指向局部变量的指针。好吧,你可以,但它不会按预期工作。

你的函数应该获取指针作为参数并在那里写入:

void func(char *L)
{
    printf("Enter your name:\n");
    gets(L);
}

int main()
{
    char L[10];
    func(L);
    printf("Your name is %s\n", L);
}

请注意,gets() 正是以这种方式定义的。

现在,这段代码是一场灾难。事实上,永远不应该使用 gets(),因为它不会也不可能检查缓冲区溢出。改为:

void func(char *buf, size_t len)
{
    printf("Enter your name:\n");
    fgets(buf, len, stdin);
}
int main()
{
    char L[10];
    func(L, sizeof(L));
    printf("Your name is %s\n", L);
}

关于c - 从函数返回一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26453978/

相关文章:

c - 使用scanf读取带空格的字符串?

c - 数据变量/常量和类型 int 常量 (C Primer Plus)

java - 代码风格 : multiple returns

go - 在 golang 中返回输入变量

c - 函数声明符代码块之后的预期函数体

c - LPC1788 : Communicating with UFDC-1 using SPI

javascript - 如何切片 String 对象直到它到达 "/"标记?

c++ - 不能用于初始化 const std::string * 类型的实体

java - 正则表达式将 2 个字符替换为 1 个字符

javascript - 为什么我使用参数调用函数和Javascript中通过()调用函数的输出不同?