C语言无法正常打印字符串

问题遇到的现象和发生背景

C语言 输入并输出字符串 无法正常输出

用代码块功能插入代码,请勿粘贴截图

void main()
{
char *str[50];

str[0] = "40";
str[1] = getchar();

puts(str[0]);
puts(str[1]);

}

运行结果及报错内容

img

很简单的一个问题
首先你需要知道以下几点:

  • 字符串以 '\0' 结尾
  • 如果有一个类型为 char a[50]; 你输入 a 则返回的是 &a[0] ,也就是第0位的地址
  • char *str = "aa"; 我们一般认为str 是常量字符串,在程序中不应该去修改。

也就是说 , 你用scanf输入 scanf("%s",a); 等同于 scanf("%s",&a[0]);
输入字符串使用的函数也有 gets 这个会读入空格等 直到你输入了回车
get(a);

还有 char *str[50] 的意思是定义一个 指针列表,如果你要定义的是字符串的话应该是 char str[50];
char *str = "aaa"; 确实可以定义一个字符串,只不过我们一般认为这个字符串为常量字符串,是不支持修改的。
而没有初始化的指针是不能对他进行赋值的操作的。
比如 char *str; scanf("%s",str);这样子我们认为这个输入实际上是溢出了,会有难以预计的后果。
如果你是需要有 50 个字符串呢,建议使用
chat str[50][50] = {0}; 这种方式去定义。而不是 char *str[50];

char *str[50]; 定义了50个字符串,要给这50个字符串挨个分配内存。
如果只是一个字符串,把型号去掉。
str[0] = "40"; 字符串不能直接=赋值。要用strcpy

你定义的是字符指针数组,你应该还定义两个字符数组将数组名赋给str[0]str[1]你str[0]这样赋值没错,但是str[1]错了getchar是读取字符的 你要么就直接也赋值常量字符串

我试了半天,要是我手动用双引号给变量赋值,就可以打印出来。但是如果用scanf或者putchar输入的不行。。。。。
我真的不知道什么原因。