一段C语言程序,为什么会出现warning?在线等

将十六进制数(不超过4位)转换为十进制数,代码:#include<stdio.h>unsignedconvert(charp[]){inti,n=0,t;for(i=0;... 将十六进制数(不超过4位)转换为十进制数,代码:
#include <stdio.h>
unsigned convert(char p[])
{
int i,n=0,t;
for(i=0;p[i]!='\0';i++)
{
switch(p[i])
{
case 'A':case 'a': t=10;break;
case 'B':case 'b': t=11;break;
case 'C':case 'c': t=12;break;
case 'D':case 'd': t=13;break;
case 'E':case 'e': t=14;break;
case 'F':case 'f': t=15;break;
default: t=p[i]-'0'; /*这行我不太明白*/
}
n=n*16+t;
}
return n;
}
main()
{
char num[4];
printf("\nPlease input a num:\n");
gets(num); /*改代码后此行有warning*/
printf("The converted rsult is %d \n",convert(num)); /*改代码后此行有warning*/
}
输入A2,输出162.正确.
把char num[4];改为char *num;运行结果正确,但会出现warning:"Possible use of 'num' before definition in function main"
请问为什么?有warning的程序算通过吗?(一共两个问题)
在线等
default: t=p[i]-'0'; /*这行我不太明白*/
这行我已经明白了,不用回答的
展开
 我来答
骑梼杌的小哪吒
2008-08-04 · TA获得超过625个赞
知道小有建树答主
回答量:385
采纳率:100%
帮助的人:153万
展开全部
因为你的num指针声明后没有给他付初值,而声明后传num后,计算机不知道他的值是什么,所以给你了个warning。而数组在声明时系统便给它分配了固定的地址空间,相当于给它付了初值,所以没有问题。

有warning程序可以通过,但是存在隐藏的危险,像你上面的例子中,字符指针的使用之前未给它确定的值,若指针除了毛病,很容易造成内存溢出,从而导致程序崩溃。有时warning可能是因为语言使用不规范造成的。
lfm13720
2008-08-04 · TA获得超过1102个赞
知道小有建树答主
回答量:896
采纳率:0%
帮助的人:0
展开全部
char *num;
这样 num 是一个未初始化的指针,要先用 new 关键字将其初始化。比如 num=new char[4]; 对于用new 分配的内存,要用delete 来释放,比如 delete num;
这个warning 不能通过,会有运行时错误,因为没有为指针分配内存,虽然编译通过了,但运行时就会使用一段没有分配的内存,程序会提示“XXX遇到问题需要关闭。”之类的话。
default: t=p[i]-'0';
这个因为p[i]是保存的一个数字字符的ASCII码,而'0'其实就是数字0的ASCII码,所以p[i]-'0'得到的正好是一个整数数字,因为1的ASCII码比0的大1,2的比0的大2,依此类推。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fbdce02
2008-08-04 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:109万
展开全部
你的main函数没有返回值 在printf("The converted rsult is %d \n",convert(num)); 后加return 0;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仲赩0h
2008-08-04 · TA获得超过448个赞
知道小有建树答主
回答量:298
采纳率:100%
帮助的人:93.9万
展开全部
在C中不影响,通过!
要是C++中就要是 void main(){}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aqiuzaizai
2008-08-04 · 超过11用户采纳过TA的回答
知道答主
回答量:25
采纳率:0%
帮助的人:22.6万
展开全部
问题关键:需要搞清楚指针和数组的区别。
其他如magician547所说。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式