召唤师 发表于 2019-12-29 17:42:19

为什么scanf输入字符串时,不能用a[0],这样的地址?

#include<stdio.h>
#include<string.h>
int main()
{
char a;
printf("请您输入一个字符串:\n");
scanf("%s",a);
      return 0;               
}

为什么运行后会出现图片的错误提示呢?
错误内容大概为“0x77c14609”指令引用的“0x00000000”内存,该内存不能为“written。”

而只要把scanf("%s",a);改成scanf("%s",a);或 scanf("%s",&a);就可以了呢?
按理说scanf("%s",a);中的a,也是指向数组第一个元素地址啊?

jackz007 发表于 2019-12-29 18:23:12

      a 代表内容,& a 才代表地址。前者代表一个苹果,后者代表一个装苹果的盒子。

召唤师 发表于 2019-12-29 18:51:45

jackz007 发表于 2019-12-29 18:23
a 代表内容,& a 才代表地址。前者代表一个苹果,后者代表一个装苹果的盒子。

恩,明白了。

秃子舰长 发表于 2020-1-4 16:04:32

a表示数组a[]的第一个元素,scanf()函数输入给参数赋值只能是地址,所以要用&取址符号,&a表示元素a的地址,单纯的a则是表示数组a[]的首地址。
如果你scanf()的参数是&a,那你输入一串的字符,只有第一个字符有效,其他输入的字符就会被舍去,就是第一个字符对a这个字符元素赋值,而其他字符元素则是为未被赋值,还是乱码。当你scanf()的参数为a时,输入一串字符才能对字符数组a[]的所有元素赋值。

召唤师 发表于 2020-4-5 00:31:18

33

召唤师 发表于 2020-4-5 00:31:53

2

召唤师 发表于 2020-4-5 00:32:25

1
页: [1]
查看完整版本: 为什么scanf输入字符串时,不能用a[0],这样的地址?