免费注册 查看新帖 |

Chinaunix

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

\0 和 '\0' 在一个字符串里的作用是一样的!?看程序! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-25 11:18 |只看该作者 |倒序浏览
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv)
{
/***
        char            buf[100];
        strncpy(buf, argv[1], 100);
        buf[100] = '\0';
        printf("%s\n", buf);
***/
        char            p[20] = "hahaxs\0400 x  \0 \170 x";
        int             i = 0;
        int             j = 0;
        for(i; p != '\0';i++){
                if(p == 'x'){
                        j++;
                }
        }
        printf("j = %d\n", j);
        return 0;
}
结果:j = 2

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

int main(int argc, char** argv)
{
/***
        char            buf[100];
        strncpy(buf, argv[1], 100);
        buf[100] = '\0';
        printf("%s\n", buf);
***/
        char            p[20] = "hahaxs\0400 x '\0' \170 x";  //改动了\0
        int             i = 0;
        int             j = 0;
        for(i; p != '\0';i++){
                if(p == 'x'){
                        j++;
                }
        }
        printf("j = %d\n", j);
        return 0;
}
结果还是:j = 2

论坛徽章:
0
2 [报告]
发表于 2007-07-25 11:47 |只看该作者
你确实搞清楚指针了吗?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2007-07-25 11:52 |只看该作者

回复 #2 tom_xx_hu@yahoo 的帖子

楼主的代码受到了 [i] 的影响

论坛徽章:
0
4 [报告]
发表于 2007-07-25 11:53 |只看该作者
不一样, 一个是\0, 另一个是一个 ' 号再加一个\0.
你看看这个代码.

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.         char p[20] = "hello\0world";
  6.         char q[20] = "hello'\0'world";
  7.         printf("%d      %d\n", strlen(p), strlen(q));

  8.         return 0;
  9. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2007-07-25 11:54 |只看该作者
回复 #2 tom_xx_hu@yahoo 的帖子


楼主的代码受到了 的影响


----------------------------啥意思?能说的具体点吗?
我在做测试要想办法把程序跑崩呵呵

论坛徽章:
0
6 [报告]
发表于 2007-07-25 11:56 |只看该作者
哦,明白了是怎么回师了,你太强人了呵呵

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2007-07-25 11:59 |只看该作者

回复 #5 xiaozhu2007 的帖子

贴代码时将代码括在 [code][/code] 当中,或者将 Discuz! 代码禁止掉。

[i] 经常在 C 中被用作数组下标,但同时它也是 Discuz! 的斜体开始标志,这两个存在冲突。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2007-07-25 12:03 |只看该作者
原帖由 scutan 于 2007-7-25 11:53 发表
不一样, 一个是\0, 另一个是一个 ' 号再加一个\0.
你看看这个代码.

#include
#include
int main()
{
        char p[20] = "hello\0world";
        char q[20] = "hello'\0'world";
        printf ...

同样,你也可以看看如下代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.     char p[20] = "hello\0world";
  6.     char q[20] = "hello'\0'world";
  7.     printf("%s\t%s\n", p, q);
  8.     printf("%d\t%d\n", strlen(p), strlen(q));

  9.     return 0;
  10. }
复制代码


在 C99 的 6.4.5 String literals 中有如下一段:
3 The same considerations apply to each element of the sequence in a character string
  literal or a wide string literal as if it were in an integer character constant or a wide
  character constant, except that the single-quote ' is representable either by itself or by the
  escape sequence \', but the double-quote " shall be represented by the escape sequence
  \".

也即在 String literals (即 "...")中,“'\0'” 本身会被理解为三个字符 ',\0,'。

[ 本帖最后由 MMMIX 于 2007-7-25 12:12 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-07-25 12:15 |只看该作者
hehe ,知道啦!!!

论坛徽章:
0
10 [报告]
发表于 2007-07-25 12:16 |只看该作者
晕倒,什么叫C99,在那里看/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP