【发布时间】:2018-01-28 18:50:48
【问题描述】:
我是编程新手,我的任务是制作一个读取名称的函数。由于某种原因,以下 'solution' 不起作用,并且输出总是带有奇怪的 chinese? 字符。什么地方出了错?
#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;
}
【问题讨论】:
-
你陷入了经典的菜鸟错误之一 - 试图在函数之外使用 local (
*a = buff;确实 not 复制字符串!) -
@YePhIcK 那么正确的方法是什么?也许使用双指针(
void input(char** a);)? -
除了这里所说的一切,考虑让buff/name数组大于8。也许10-20。它可能是未来错误和问题的来源。我自己的名字比那个长:)
-
一个 8 字节的缓冲区正在自找麻烦。
scanf在自找麻烦。很多这不过是麻烦。使用read可以限制从输入中读取的数据量。scanf可以而且会在数据放不下时爆炸。
标签: c