IP字符串转整数[面试]
去某互联网公司运维部面试,看似非常简单的一道题,我虽然五分钟内写了出来,但错误很多,还好面官只指出了一两个。更不要说运行了!最近准备求职,昨晚变拿来上机实践,结果两个多小时没挑通。晚上睡觉十二点多,还起来改了改,但仍然不完全正确,今日早饭后,又调试一小时,终于成功!拿来分享!
首先,总结经验:1、动笔前一定要深思熟虑,这比边写边改实际要节约时间!
2、如果基本确认是语法错误,可以慢慢调,如果自己逻辑都不清楚,干脆重来!要有重构的勇气!
1 #include<stdio.h> 2 //程序功能,将“192.168.1.29”之类的IP转化为(相当与去掉小数点后的)整数 3 int main(){ 4 5 char ip[]="0.3.2.1.";//如果你的机器sizeof(int)是2字节,还要考虑溢出问题! 6 7 int sum=0,i=0,j=0,n=0;//erroor1:i不初始化,以后一但下标越界就是段错误! 8 int cnt=4; 9 char tmp[4]; 10 11 while(cnt>0){ 12 int tmpsum=0;//不要只记得开始的sum初始化,任何边写边新曾的变量都要初始化,否则结果不对! 13 14 if(ip[j]!='.'){ 15 tmp[i]=ip[j]; 16 //printf("%c\n",ip[j]); 17 i++;j++; 18 }else{ 19 i=0;j++; 20 tmpsum=atoi(tmp); 21 //printf("*%d\n",tmpsum); 22 if (cnt!=1){ 23 for(n=cnt-1;n>=1;n--) 24 tmpsum*=256; 25 printf("**%d\n",tmpsum); 26 } 27 cnt--; 28 } 29 30 sum+=tmpsum; 31 //printf("***%d\n",tmpsum);// 32 } 33 printf("%d\n",sum); 34 return 0; 35 }
今天还学到了gdb调试程序的知识,以前懒得做非IDE下的调试,今天看到陈皓的《用GDB调试程序》系列文章,向大家推荐!