char*p;scanf("%s",p);为啥就是错的,int *s;scanf("%d",s);就是对的了?

如题所述

无论是 char*p;scanf("%s",p); 还是 int *s;scanf("%d",s); 都是错的,因为没有给 p 或者 s 申请内存空间。
语法上是对的,编译时可以通过,先进一点的编译器应该有警告,"使用未初始化的变量",但很可能会出现运行错误,如果不出现运行错误,就麻烦大了,scanf 改写了不属于该程序的内存。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-25
其实这两种做法都是可以的,只不过你的程序是有问题的,原因是指针变量没有初始化,下面的程序就没有问题:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *p=(char*)malloc(10);
int *a=(int*)malloc(sizeof(int));
scanf("%s",p);
scanf("%d",a);
printf("%s,%d\n",p,*a);
return 0;
}本回答被提问者和网友采纳
第2个回答  2012-12-25
严格说2个都不对。
p 和 s 是指针,都没有 初始化,没有存放数值的单元。

“就是对的”-- 你的编译器 要求较宽松。
我的编译器 得警告性错误 C4700 -- uninitialized local variable
第3个回答  2012-12-25
因为%s是输入一个字符串,对于scanf而言,一次只能输入一个字符。%d是输入同一个整形的数,因而可以成功
第4个回答  2012-12-25
应该左边是对的右边是错的……要写scanf("%d",&s);……左边的字符型本来就有指针所以不用加&
相似回答