免费注册 查看新帖 |

Chinaunix

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

关于字符串截断 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-05 17:44 |只看该作者 |倒序浏览

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

  3. char *s1 = "dasgaswsaf214daf";
  4. char *s2 = "-=334fa534sdfasdewqaf";
  5. void cut_str()
  6. {
  7.         char *p = NULL,*p_end = NULL;
  8.         p = strstr (s1, "ga");
  9.         do{
  10.         if (p){
  11.                 printf ("%s\n",p);
  12.                 p_end = strchr (p, '2');
  13.                 if (p_end)
  14.                         *p_end = 0x0;
  15.                 else
  16.                         break;
  17.                 printf ("%s\n", p_end);
  18.         }
  19.         }while(0);
  20.         }
  21. int main()
  22. {
  23.         cut_str ();
  24.         return 0;
  25. }
复制代码
大家帮我看看为什么老是会出现段错误呢?应该怎么改阿? 谢谢!

论坛徽章:
0
2 [报告]
发表于 2010-11-05 17:45 |只看该作者
本帖最后由 lsupper 于 2010-11-05 17:48 编辑

char *s1 = "dasgaswsaf214daf";
char *s2 = "-=334fa534sdfasdewqaf";
声明的数据时常量...不能修改....
所以在:
*p_end = 0x0;
的时候,肯定有问题》。。。。。。。。。。。。。。

论坛徽章:
0
3 [报告]
发表于 2010-11-05 17:47 |只看该作者
是我乱按的字符串  s2没有用上的

论坛徽章:
0
4 [报告]
发表于 2010-11-05 17:48 |只看该作者
回复 3# shujunz

嗯,刚我看错...失误....现在的看我编辑过的吧...呵呵..........

论坛徽章:
0
5 [报告]
发表于 2010-11-05 17:52 |只看该作者
如果用

  1. int main(int argc,char *argv[])
  2. {
  3.        char *s1=argv[1];
  4. }
复制代码
这样从键盘输入端获取字符串可以吗?----我去试一试

论坛徽章:
0
6 [报告]
发表于 2010-11-05 17:55 |只看该作者

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

  3. //char *s1 = "dasgaswsaf214daf";
  4. //char *s2 = "-=334fa534sdfasdewqaf";
  5. void cut_str(char *s1)
  6. {
  7.         char *p = NULL,*p_end = NULL;
  8.         p = strstr (s1, "ga");
  9.    do{
  10.         if (p){
  11.                 printf ("%s\n",p);
  12.                 p_end = strchr (p, '2');
  13.                 if (p_end)
  14.                         *p_end = 0x0;
  15.                 else
  16.                         break;
  17.                 printf ("%s\n", p_end);
  18.         }
  19.    }while(0);
  20. }
  21. int main(int argc, char *argv[])
  22. {
  23.         char *s=argv[1];
  24.         cut_str (s);
  25.         return 0;
  26. }
复制代码
可以了 谢谢楼上  我大概 约摸 估计 弄清楚了  呵呵

论坛徽章:
0
7 [报告]
发表于 2010-11-05 18:07 |只看该作者
回复 6# shujunz


你这样传进去还是不是很安全的,建议:
char *s1 = "dasgaswsaf214daf";
char *s2 = "-=334fa534sdfasdewqaf";

改为:
char s1[] = "dasgaswsaf214daf";
char s2[] = "-=334fa534sdfasdewqaf";

论坛徽章:
0
8 [报告]
发表于 2010-11-05 18:18 |只看该作者
哦  对内存开辟那几个函数和知识点老是模模糊糊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP