为什么c语言编程编译时找不出错误,却在运行时程序自动关闭!!求高手指点

#include <stdio.h>
#include <string.h>
int main()
{
int a,b,i,c;
char *s;
char d[]="伟大的少爷";
printf("听说今天是肥恩君的生日,于是我这个简单的小程序就为那个不要脸的混蛋诞生了!请输入“伟大的少爷”五个字按回车键以继续程序\n");
scanf("%s",s);
if(strcmp(s,d)==0)
{
printf("想把程序进行下去,请输入通行码(你的体重/kg):\n");
scanf("%d",&a);
if(a<50)
{
(后面省略)

求高手尽快解决。她要生日了谢谢跪谢。刚刚大一不久,还没真正开始学C语言,所以很多不懂
就是这种情况

s没有分配空间,导致野指针错误.

改成

#include <stdio.h>
#include <string.h>
int main()
{
int a,b,i,c;
char s[100];//here
...
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-24
DOS下的C
要支持中文还是比较麻烦的
楼主可能要杯具了

char *s;改为char s[100];试下
定义数组会分配确定的空间
定义指针不会有确定的空间,指针必须要与某变量绑定
第2个回答  2013-09-24
额!把你想要的效果 和注意事项发上来 我看看,我也是刚入手c语言追问

发了补充了。你看看

第3个回答  2013-09-24
运行完之后直接就会关闭,建议你最后放一个scanf,然后就会暂停了。追问

什么意思,我最后一个就是scanf啊

第4个回答  2013-09-24
将char *s改为char s[50]追问

哇哇哇你好厉害,真的可以了。能告诉我为什么吗

追答

你原来的用法,并未给指针分配内存,char s[50]表明分配了50个字节空间给s

追问

我原来的用法默认给多少空间给s?那么d呢?为什么d就可以“伟大的少爷”这五个中文字符

追答

指针用法跟数组的区别;
指针没分配,你就不知道他指向什么地方,那在对他间接访问就会出错;
而数组他的首地址就是伟字的地址。
建议你看下《C和指针》详细介绍数组,与指针用法

先看下这篇文档吧http://wenku.baidu.com/view/3be61f8984868762caaed5a5.html

追问

谢谢你的指点

本回答被提问者采纳
相似回答