免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: wilbur8415
打印 上一主题 下一主题

[C] How to del a character from a string? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-04-08 16:52 |只看该作者
原帖由 xi2008wang 于 2008-4-8 12:43 发表
K&R2.8

   /* squeeze:  delete all c from s */
   void squeeze(char s[], int c)
   {
      int i, j;

      for (i = j = 0; s != '\0'; i++)
          if (s != c)
              s[j++] = s ...


How clever you are!

论坛徽章:
0
22 [报告]
发表于 2008-04-08 16:53 |只看该作者
另外一个笨方法

man strtok

一定符合各种各样的标准

不过,还是“思一克”的方法好

经典的方法

论坛徽章:
0
23 [报告]
发表于 2008-04-08 16:55 |只看该作者
原帖由 cjaizss 于 2008-4-8 16:43 发表

这样们使用不符合标准


cauz  the strcpy function  didn't   recommend   overlaping of dst and src?

论坛徽章:
0
24 [报告]
发表于 2008-04-08 17:11 |只看该作者
没有问题的.
man strcpy说
The strings  may not overlap, and the destination string dest must be large
enough to receive the copy.

不是一定不能overlap. 实际这样使用, 字符一个又一个COPY, 内部没有破坏性overlap发生.

你可以实验, 在所有系统上都应该可以. 因为不可能有strcpy的实现从后面往前拷.


原帖由 cjaizss 于 2008-4-8 16:43 发表

这样们使用不符合标准

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
25 [报告]
发表于 2008-04-08 17:25 |只看该作者
原帖由 思一克 于 2008-4-8 17:11 发表
没有问题的.
man strcpy说
The strings  may not overlap, and the destination string dest must be large
enough to receive the copy.

不是一定不能overlap. 实际这样使用, 字符一个又一个COPY, 内 ...

我知道一般的时候都可以,我也这么用过,也没出过问题(当然,源地址不可低于目的地址)
但是标准我还是希望遵守的。

[ 本帖最后由 cjaizss 于 2008-4-8 17:26 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2008-04-08 17:32 |只看该作者
别人只是问一个问题,某些人的素质~~~~

论坛徽章:
0
27 [报告]
发表于 2008-04-08 23:10 |只看该作者
cjaizss  的意见是正确的。

man 中写得很清楚:The strings  may not overlap,翻译过来就是:(这两个)字符串不可以重叠。如果拷贝的空间重叠了,C 标准的规定也很明确:产生无定义行为。

>> 你可以实验, 在所有系统上都应该可以. 因为不可能有strcpy的实现从后面往前拷.

但是你不可能实验所有的编译器(包括过去的符合标准的编译器;更不用说未来的符合标准的编译器了),所以很多情况下实验得到的结论总是缺乏普遍性以及可靠性。编译器的实现是根据标准来的,此时,确认的最终基准应该看标准的规定。

论坛徽章:
0
28 [报告]
发表于 2008-04-08 23:13 |只看该作者
那去JAVA吧

论坛徽章:
0
29 [报告]
发表于 2008-04-09 09:12 |只看该作者
也同意你, 根据标准小心就是了.

(strcpy) may not 准确翻译不应该是"不可以". 而是, 可能不可以. 就是有的时候不可以, 有时候可以.
(memcpy) The memory areas should not overlap 才是"不可以", "不应该". "应该不". 任何时候都不
(memmove) The memory areas may overlap 可能.

否则你如何区分同一个库中的"may not", "should not"?

-------------------
原帖由 whyglinux 于 2008-4-8 23:10 发表
cjaizss  的意见是正确的。

man 中写得很清楚:The strings  may not overlap,翻译过来就是:(这两个)字符串不可以重叠。如果拷贝的空间重叠了,C 标准的规定也很明确:产生无定义行为。

>> 你可以实验 ...

论坛徽章:
0
30 [报告]
发表于 2008-04-09 09:34 |只看该作者

回复 #29 思一克 的帖子

设置2个临时变量 不就得了,,对于may not 需要进行实验 ,但是使用临时变量进行strcpy一定是 must
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP