为什么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,也是指向数组第一个元素地址啊? a 代表内容,& a 才代表地址。前者代表一个苹果,后者代表一个装苹果的盒子。 jackz007 发表于 2019-12-29 18:23
a 代表内容,& a 才代表地址。前者代表一个苹果,后者代表一个装苹果的盒子。
恩,明白了。 a表示数组a[]的第一个元素,scanf()函数输入给参数赋值只能是地址,所以要用&取址符号,&a表示元素a的地址,单纯的a则是表示数组a[]的首地址。
如果你scanf()的参数是&a,那你输入一串的字符,只有第一个字符有效,其他输入的字符就会被舍去,就是第一个字符对a这个字符元素赋值,而其他字符元素则是为未被赋值,还是乱码。当你scanf()的参数为a时,输入一串字符才能对字符数组a[]的所有元素赋值。 33 2 1
页:
[1]