您的当前位置:首页>全部百科>百科问答详情
注:文章内容来源于网络,真实性有待确认,请自行甄别。

C语言高手进!急!下面程序的功能是将无符号八进制数字构成的字符串

发表于:2024-10-24 00:00:00浏览:7次 分类: 电脑/网络-软件
问题描述:下面的功能是将无符号八进制数字构成的字符串转换成十六进制的帧数。 #include "stdio.h" void main() { char *p,s[6]={123456}; int n; p=s; gets(p); n=*p-'0'; while(*++p='\0') n=n*8+*p-'\0'; printf("%d\n",n); } 请问倒数第三行为什么是*++p,而不是*p或*p++?
抛开你的目的,就你本身这段程序来说,问题不少。 第四行char *p,s[6]={123456};这一句定义有错,应该是 char *p,s[7]={"123456"}; 或char *p,s[]={"123456"}; 赋值字符数组时要加双引号,而且末尾还有一个'\0'字符的,所以要注意数组的下标。 第七行gets(p)会出问题的,因为gets是从p所指向的地址的下一个位置开始写入,p当前所指向的地址的当前的值没有改变,这会在处理的时候出问题 倒数第三行while(*++p='\0')?赋值语句作为while的循环条件。。。这种事情很让我无语。。。应该是while(*++p!='\0') 或 while(*++p=='\0') 吧。 (PS:本来想写评论的,但是怕字数限制写不够。你这八进制转十六进制的算法看起来不大像,建议重新研究下算法) (补充一下,回答你的问题) 倒数第三行为什么是*++p,而不是*p或*p++? 如果是while(*++p!='\0') 或 while(*++p=='\0')的话,*++p表示*(++p),即p所指向的下一个地址内的值,其中前置++符号会优先处理的,处理完*++p后再执行!=或==操作;如果是*p,p的值和p地址的值在循环中没有变化,那就会陷入死循环;而如果是*p++,后置++符号会在==符号处理或!=符号处理之后,那么代码的执行过程相当于这样:*p=='\0'或*p!='\0'后再执行p++,这样的话如果p刚好处于字符串末尾,p++操作就会造成溢出,代码也就不安全了。

猜你喜欢

PhotoShopCS6
PhotoShop S6
发表于:2024-10-24 00:00:00 浏览:419 分类: 电脑/网络-软件
XLS文件用什么软件可以打开如题
如题
发表于:2024-10-24 00:00:00 浏览:94 分类: 电脑/网络-软件
哪儿有免费的视频剪辑工具?我机器中有许多AVI、RM、WMV等格
我机器中有许多AVI、RM、V等格式的视频文件,想找个能对文件进行部分剪辑,不需改变文件格式的工具。我使用Allok Video Splitter V1.4.8 汉化绿色版时改变了原存储格式,有点慢,且存为AVI时文件太大了,怎么与我机器中的AVI格式不一样了?
发表于:2024-10-24 00:00:00 浏览:91 分类: 电脑/网络-软件
如何更新浏览器的版本?
如何更新的版本?
发表于:2024-10-24 00:00:00 浏览:79 分类: 电脑/网络-软件
请推荐:红宝石软件全能破解版下载网站(能稳定运行的)赠10分1、
1、能稳定运行。 2、能提供破解版且声誉较好的网站有哪些?
发表于:2024-10-24 00:00:00 浏览:50 分类: 电脑/网络-软件
智能ABC输入法究竟如何使用?
智能ABC输入法究竟如何使用?
发表于:2024-10-24 00:00:00 浏览:48 分类: 电脑/网络-软件
BitstreamFontNavigator怎么用
Bstream Font Navigator怎么用
发表于:2024-10-24 00:00:00 浏览:46 分类: 电脑/网络-软件
怎么解决PS暂存已满
怎么解决PS暂存已满
发表于:2024-10-24 00:00:00 浏览:42 分类: 电脑/网络-软件
如何完全删除按键精灵用360删不了!
用360删不了!
发表于:2024-10-24 00:00:00 浏览:39 分类: 电脑/网络-软件
为什么360浏览器总是趁你不注意给你安装在电脑上?有时候360卫
有时候360卫士更新时,趁你直接按键“确定”就给装上不想要的。
发表于:2024-10-24 00:00:00 浏览:36 分类: 电脑/网络-软件