大家给我解释下;谢谢!!! char *s;scanf("%s",s); 是哪里出错,

如题所述

第1个回答  2012-05-29
你可以试试

char *a="12345";
printf("%s",a);

这样你可以看到屏幕上输出12345
char *a这个是告诉编译器,要用一个指针(编译器在内存中开一个空间放指针),让指针指向放着“12345”内容的地方,eoh,这时候没为“12345”开空间,那编译器就认为这个是常量字符串了,自己把它放常量区里,让指针指向常量区的这个串。既然是常量区的东西,那以后就不能改了,尽管p能指向并读取,但不能改写。(这段是别人说的,详情自己搜索char *a和char a[]的区别)

所以用scanf语句会有错误,你可以改成char s[MAXSIZE] ; 这样就能正常的录入了。

希望可以帮到你。追问

#include"stdio.h"
main()
{
char s[8];
scanf("%s",s);
printf("%s\n",s);
}
我运行了,加不加都可以 ,,,这怎么解释

追答

请问你指的是加什么,你上面那段代码是对的,没有问题,如果你把char s[8]改成char *s,就有问题了!

追问

scanf("%s",s);当中的s前面加&

追答

那个没有必要加,反正我写的时候没加过!

追问

不是没有必要加不加,这两个到底是加正确还是不加正确,,,,

追答

我刚查了,变量,字符需要加&,指针,字符串不用加。

第2个回答  2012-05-29
你用malloc在堆空间申请了一块内存,现在你把唯一的指针指向了字符串的末尾,现在进行释放内存操作,肯定出问题啦。free又不知道你想从哪里开始释放的。

在用之前把初始位置保存起来:
char *p = s;
...

if (p)
{
free(p);
}追问

char *s;scanf("%s",s);我想问这条语句有错吗?

追答

有的

第3个回答  2012-05-29
有错,少了&
应该是scanf("%s",&s)追问

#include"stdio.h"
main()
{
char s[8];
scanf("%s",s);
printf("%s\n",s);
}
我运行了,加不加都可以 ,,,

追答

#include"stdio.h"
void main()
{
char s[8];
scanf("%s",&s);
printf("%s\n",s);
}
你少了了数据返回类型定义,通常用void,顶级的程序员一般不用,多用int main(){....},还有就是对于stdio.h函数中,scanf函数的地址符落了!希望能帮上你!采纳吧,呵呵!

追问

首先char s[8]说明s是一字符数组,也可以说s的首地址是一指针常量,所以运行scanf("%s",&s);时,&不用写,是不是这样的。。。。。。按理说写了会出错,但我也运行了,都可以的,怎么解释。。。 我想问“scanf("%s",s); ”是哪里出错!!!!

第4个回答  2015-07-22
很简单,指针变量没有初始化
相似回答
大家正在搜