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调试程序》系列文章,向大家推荐!

posted @ 2012-09-13 10:29  aitao  阅读(1483)  评论(0编辑  收藏  举报