char a[100] 然后我scanf("%s",a[1])怎么就不行呢!

2024-11-07 23:43:35
推荐回答(5个)
回答(1):

scanf("%s",a[1]) 不行,因为%s要求参数是字符变量的首地址。读入到从那个地址开始的单元里去

scanf("%s",&a[1]); 可以的。(你从 a 的第二个单元用起)。
printf("%s",&a[1]); 可以输出你刚打入的字符串。

这时若 printf("%s",a); 语法没错,但因为 a[0] 里没东西(含不确定的信息),所以你也许可以打印,也许不能打印。

正确用法是
scanf("%s",&a[0]); 或
scanf("%s",a);

回答(2):

char *a[100];

这样定义 a 是字符指针数组

其中每个元素 比如 a[1] 都是一个字符型指针
但是这时候并没有指向有效的地址
直接 scanf("%s",a[1]) 自然不行了

char *a[100];
char buffer[100];

a[1] = buffer;
scanf("%s",a[1]);

这样就可以了

char *a[100];

a[1] = (char *)malloc(100);
scanf("%s",a[1]);
这样也行

回答(3):

格式对应错误:scanf里逗号后应为地址,而a[1]是变量而非地址属性。再者,前面的%s也不相对应

两种正确改正方法:
第一种:把%s改为%c并且要把a[1]改为&a[1]
第二种:仅需把a[1]改为a
(希望对您有帮助,谢谢)

回答(4):

因为你分配了100个指针,这些指针都是没有初始化的,也就是没有指向的地址,所以当你scanf的时候,根本就没有给出地址,或者说给出了一个0地址,所以肯定要出错

回答(5):

谁说scanf("%s", &a[1]);不行啊?我经常用的,有图有真相