
神啊~~救救我吧!!(关于C语言...)
请详细看如下程序:(我使用的软件是DevC++与C-free)#include"stdio.h"intmain(){char*a;gets(a);puts(a);retu...
请详细看如下程序:(我使用的软件是Dev C++ 与C-free)
#include"stdio.h"
int main()
{ char *a;
gets(a);
puts(a);
return 0;}
以上程序运行后输入一个字符串,回车后输出一个字符串(这个没问题.请看下面这个.)。
#include"stdio.h"
int main()
{ int m;
char *a;
gets(a);
puts(a);
return 0;}
就是在char *a;前面随便加个语句(这个语句是没用,但是我加上之后,程序运行出错!!!这还不算奇怪,奇怪的在下面!)
#include"stdio.h"
int main()
{ char *a;
int m;
gets(a);
puts(a);return 0;}
(看到了吧,我将int m;这个语句放到char *a;的后面,这时程序正常运行!!!)==================
这是为什么啊?说指针使用前必须赋值(给它一个初始地址,可似乎是没用啊?难道是编译器不严谨?) 展开
#include"stdio.h"
int main()
{ char *a;
gets(a);
puts(a);
return 0;}
以上程序运行后输入一个字符串,回车后输出一个字符串(这个没问题.请看下面这个.)。
#include"stdio.h"
int main()
{ int m;
char *a;
gets(a);
puts(a);
return 0;}
就是在char *a;前面随便加个语句(这个语句是没用,但是我加上之后,程序运行出错!!!这还不算奇怪,奇怪的在下面!)
#include"stdio.h"
int main()
{ char *a;
int m;
gets(a);
puts(a);return 0;}
(看到了吧,我将int m;这个语句放到char *a;的后面,这时程序正常运行!!!)==================
这是为什么啊?说指针使用前必须赋值(给它一个初始地址,可似乎是没用啊?难道是编译器不严谨?) 展开
3个回答
展开全部
好吧,我想你对c的了解还不是很深入,不知道是复制粘贴时怎么了还是你本身格式不对,我贴我代码给你讲讲吧~
#include<stdio.h>
int main()
{
int m;
char a[15];
gets(a);
puts(a);
return 0;
}
第一行,最好用《》而不是“ ”,这是关于c本身的库函数和自己构造的库函数的区别~
第二,int m,是没错的,因为根本没用,可能会产生warming吧,绝不可能楚翔error~~~~也就是没事,有事就是你编译器的问题,重新安装
第三,char a【15】;这个才是对的~~char* a是改不了*a的,这个*a是改不了的,只能初始化!!
#include<stdio.h>
int main()
{
int m;
char a[15];
gets(a);
puts(a);
return 0;
}
第一行,最好用《》而不是“ ”,这是关于c本身的库函数和自己构造的库函数的区别~
第二,int m,是没错的,因为根本没用,可能会产生warming吧,绝不可能楚翔error~~~~也就是没事,有事就是你编译器的问题,重新安装
第三,char a【15】;这个才是对的~~char* a是改不了*a的,这个*a是改不了的,只能初始化!!
追问
问题是,我不把那个字符指针初始化也可以运行啊?
书上写的也是使用指针前“必须给要使用的指针赋一个初值”,可是不服初值也不出现错误或者警告,照样运行!...我很奇怪啊,重装了软件,还是这样子啊...
追答
赋值是为了安全问题,兴许你现在不懂~~
那就装Visual C++6.0吧,给分·······
展开全部
呵呵.
#include "stdio.h"
int _tmain(int argc, _TCHAR* argv[])
{
char a[20] = {'\0'};
gets_s(a,20);
puts(a);
return 0;
}
这个是比较安全的写法.
希望楼主用一些比较正规的编译器.比如VS2010之类的,虽然比较卡,但卡的值!
#include "stdio.h"
int _tmain(int argc, _TCHAR* argv[])
{
char a[20] = {'\0'};
gets_s(a,20);
puts(a);
return 0;
}
这个是比较安全的写法.
希望楼主用一些比较正规的编译器.比如VS2010之类的,虽然比较卡,但卡的值!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个也是错的,不能给指针直接赋值.
#include"stdio.h"
int main()
{
int m;
char a[100];
gets(a);
puts(a);
return 0;
}
#include"stdio.h"
int main()
{
int m;
char a[100];
gets(a);
puts(a);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询