免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2953 | 回复: 12
打印 上一主题 下一主题

[C] C中处理字符串函数,请帮忙看看哪里出了问题?感谢!【已解决】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-30 09:56 |只看该作者 |倒序浏览
本帖最后由 Mr_Yao 于 2010-12-30 14:26 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5.     char testline[56] = "sln:\\127.0.0.1:80sln";
  6.     char *ip;
  7.     char *port;
  8.     char *str;
  9.     int iport;
  10.     ip = (char*)malloc(32);
  11.     port = (char*)malloc(10);
  12.     str = (char*)malloc(56);
  13.     if(ip == NULL || port == NULL ||str == NULL)
  14.     {
  15.            printf("Error!malloc!\n");
  16.            return -1;
  17.     }
  18.     strncpy(str,testline,56-1);
  19.     while(*str<=48 || *str>= 57)
  20.     {
  21.         str ++;
  22.         printf("str is [%s]\n",str);
  23.     }
  24.     while(*str == '.' || (*str<=57 && *str>=48))
  25.     {
  26.         *(ip++) = *(str++);
  27.     }
  28.     printf("ip is [%s]\n",ip);

  29.     str++;
  30.     while(*str >=48 && *str <= 57)
  31.     {
  32.            *port++ = *str++;
  33.     }
  34.     iport = atoi(port);
  35.     printf("iport is [%d]\n",port);
  36.     getch();
  37.    
  38.     return 0;
  39. }

复制代码
大家帮忙看下,为什么ip和port输出的结果很奇怪呢?谢谢!

论坛徽章:
0
2 [报告]
发表于 2010-12-30 10:04 |只看该作者
申请完的空间, 最好先清空, 奇怪的结果就是由于没有遇到结束符所致。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2010-12-30 10:09 |只看该作者
写得太啰嗦,直接找到\和:就可以了,也用不着拷贝

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
4 [报告]
发表于 2010-12-30 10:26 |只看该作者
回复 1# Mr_Yao


    ip指针变了,不是指的开头,发现没有?

论坛徽章:
0
5 [报告]
发表于 2010-12-30 10:35 |只看该作者
建议使用 strtook函数解析 这样太罗嗦了吧 另外新分配的堆内存需要做初始化 还有用完了要释放的
个人感觉在这里完全没有必要使用malloc 直接申请栈空间就满足了要求了...

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
6 [报告]
发表于 2010-12-30 10:41 |只看该作者
回复 5# wb112200


    亦非,完全同意你的说法。

论坛徽章:
0
7 [报告]
发表于 2010-12-30 10:43 |只看该作者
回复 6# rubylc_unix


    {:3_196:} ... 今天压火箭比赛了 可惜不能看啊 杯具...

论坛徽章:
0
8 [报告]
发表于 2010-12-30 10:45 |只看该作者
回楼上几位,我也觉得罗嗦的很,现在代码找到错误了,各位看看能不能优化一下?用比较精简的代码实现?

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5.     char *str = "sln:\\168.0.0.1:80sln";
  6.         char *iptmp;
  7.         char *ip;
  8.         char *porttmp;
  9.         char *port;
  10.         int iport = 0;
  11.         iptmp = (char*)malloc(32);
  12.         memset(iptmp,0,32);
  13.         porttmp = (char*)malloc(10);
  14.         memset(iptmp,0,10);

  15.         if(iptmp == NULL || porttmp == NULL)
  16.         {
  17.            printf("Error!malloc!\n");
  18.            getch();
  19.            return -1;
  20.     }
  21.         ip = iptmp;
  22.         port = porttmp;

  23.         while(*str<=48 || *str>= 57)
  24.         {
  25.                 str ++;
  26.         }
  27.         while(*str == '.' || (*str<=57 && *str>=48))
  28.         {
  29.         *iptmp++ = *str++;
  30.     }
  31.         printf("IP is [%s]\n",ip);
  32.         while(*str<=48 || *str>= 57)
  33.         {
  34.                 str ++;
  35.         }
  36.         while(*str>=48 && *str<= 57)
  37.         {
  38.         *porttmp++ = *str++;
  39.         }
  40.         printf("Port is [%s]\n",port);
  41.         iport = atoi(port);
  42.         printf("iport is [%d]\n",iport);
  43.         free(iptmp);
  44.         free(porttmp);
  45.         getch();
  46.    
  47.     return 0;
  48. }

复制代码

论坛徽章:
0
9 [报告]
发表于 2010-12-30 10:45 |只看该作者
回复 4# rubylc_unix


    恩,发现了。这个错误不应该犯。。。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
10 [报告]
发表于 2010-12-30 10:47 |只看该作者
本帖最后由 rubylc_unix 于 2010-12-30 10:48 编辑

回复 9# Mr_Yao


    然后修改下,基本上可以了,可以参考5楼说得。我调了下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP