c - 创建一个读取(字符串)输入的函数

标签 c

我是编程新手,我有一项任务是创建一个读取名称的函数。出于某种原因,以下“解决方案” 不起作用,输出总是带有奇怪的中文? 字符。什么地方出了错?

#include <stdio.h>
#include <stdlib.h>

void input(char* a);

int main()
{
    char name[8];

    input(&name);

    printf("%s", name);

    return 0;
}

void input(char* a)
{
    char buff[8];

    scanf("%s", buff);

    *a = buff;
}

最佳答案

我觉得是你的问题

    *a = buff;

声明,因为 buff 在您的函数之外没有生命。所以它的内存会丢失..所以以这种方式尝试和使用 buff 是不安全的...

[ 但正如@pablo 所指出的,*a = buff; 将做的是复制 buff 的地址并将其放入分配给 的内存中a,这真的不是你想做的。 ]

下面应该可以工作,并且从你的函数中包含 return

#include <stdio.h>
#include <stdlib.h>

void input(char* a);

int main()
{
    char name[8];

    input(&name);

    printf("%s", name);

    return 0;
}

void input(char* a)
{
   // char buff[8];

    scanf("%s", a);

  //  *a = buff;
    return;
}

另一点是检查您是否确定名称只有 8 个字符长...为什么不将其设置为 50 个字符?

关于c - 创建一个读取(字符串)输入的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48490104/

相关文章:

c - 错误 : Assignment makes pointer from Integer without a cast. .. 在 C 程序中

c - 在 C 中具有严格别名和严格对齐的面向对象模式的最佳实践

c - 使用可变宏动态地为宏名称添加前缀

c - 结构数组中每个元素的互斥锁

c - 如何在堆栈中进行 RPN 计算?

c - 用户空间缓冲区和内核缓冲区

c - Open GL ES 2 - glFramebufferTexture2D with Incomplete Missing Attachment 错误

c++ - 有什么东西我可以用 C 做,但不能用 C++ 做吗?

c - 在 C 中的打印语句中添加条件字符

c - 在 C 中反转列表后打印单链表的问题