首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个关于'\0'的有关问题,高手来看看

2012-02-25 
一个关于\0的问题,高手来看看我编一个程序想用这么一句while(a[i]){}就是说字符串不到 \0 的时候一直执

一个关于'\0'的问题,高手来看看
我编一个程序想用这么一句

  while(a[i])
{

    }
就是说字符串不到 '\0 '的时候一直执行
我又想万一字符串里出现0怎么办?它还执行吗?
于是我编了一下试了一试

#include <stdio.h>
main()


{
char   a= '\0 ';
char   s[]={ "i   am007   boy "};
if   (s[5]== '0 ')printf( "a[5]==0\n ");
else   printf( "a[5]!=0\n ");
if   (s[5]== '\0 ')printf( "a[5]==\\0\n ");
else   printf( "a[5]!=\\0\n ");
printf( "a   de   ascII   ma   shi   %d\n ",a);

}

结果是
a[5]==0
a[5]!=\0
a   de   ascII   ma   shi   0

我的问题是
1.既然   0和 '\0 '的ASCII   码都是0   为什么不相等?
2.假如我用
while(a[i])
{

    }
假如字符串中a[i]是个0   会不会跳出循环?
我是初学者,如果是很低级的问题希望大家不要笑话

[解决办法]
0和 '\0 '是一样,但是你是 '0 ',是字符0,不是数字0
[解决办法]
0和 '\0 ' 完全不一样
0是整数 
'\0 '是字符
当然 
如果你把数字0转换成字符就是 '\0 '了
但是 2者并不相同

水 可以变成 冰
冰 也可以变成 水
但是 
水和冰 不一样
[解决办法]


0和 '\0 ' 完全不一样
0是整数 
'\0 '是字符
当然 
如果你把数字0转换成字符就是 '\0 '了
但是 2者并不相同

水 可以变成 冰
冰 也可以变成 水
但是 
水和冰 不一样
---------------
wrong
[解决办法]
'\0 ' 的 ASCII 码值就是 0
[解决办法]
当使用 while(a[i]) 这样的判断语句的时候,
实际上就是在 判断 a[i] 的ASCII 码值。
[解决办法]
我倒,编程这么多年了都没有发现这个问题
lz你好牛啊
[解决办法]
0的ASCII码值 是48
'\0 'ASCII码是0

如何一样?
[解决办法]
字符 '0 '的asscii值是0x31,而 '\0 '的值是0。二者肯定不一样的了。

这个东西理解了,你的第二个问题就解决了。
[解决办法]
'0 '的asscii值是0x31,而 '\0 '的值是0.

while(a[i])比较的是字符 '0 '的assII,不是跟0在比较。
而如果a数组是int数组的话,就不一样了...
[解决办法]
字符 '0 '的asscii值是0x31
=========================

是0x30吧
[解决办法]
.......我又想万一字符串里出现0怎么办?它还执行吗?.....
字符串里的0是字符 '0 '啊,我的楼主嘞。不要把生活中的0和字符里的弄混了

一句话,楼主把字符’0‘和数字0和’\0‘的概念混淆了。
第一个问题:实际上比较的是 '0 '和 '\0 ';答案明显不等了。
第二个问题:遇见字符 '0 '不会跳出。但是遇见 '\0 '就跳出来了。

[解决办法]
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!


我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
我现在终于明白为什么非常经典的C语言书都附带ASCII表了,因为很多人都是瞎子!
[解决办法]
补充:因为数字0和 '\0 '在内存中存放形式是一样的。C语言处理时安非0即”真“处理。
所以呢,对待这类问题一定要看内存中的存放形式是什么。
[解决办法]
楼上的大虾们已经作了很详细的解释了,楼主可以自己去思考,或百度。

顺便提醒一下楼主,在c语言中,数组的下标是从第0位开始的,即 "i am007 boy "中的 'i '其实是该数组的第0位而第一个0其实在数组中是第4位,如果楼主之前没有注意到这点的话,需要引起注意了。当然如果楼主之前已经明白的话,自可一笑了之。

LZ可以运行这个程序看看
#include <stdio.h>

void main (void)
{
int put[10] = {4,0,5,6,7,85,3,5};
int i = 0;


while (put[i++])
{
printf ( "%d ", put[i]);
putchar ( '\n ');
}
}

[解决办法]
#include <stdio.h>

void main (void)
{
char put[10] = "I am boy ";
int i = 0;

while (put[i])
{
printf ( "%c ", put[i]);
i++;
putchar ( '\n ');
}
}

楼主可以将这两个程序拿来做比较,第一个程序是在哪结束的?第二个程序又是在哪结束的?
只有多调试才会进步的。
[解决办法]
0 0x30
\0 0x00
[解决办法]
char a=0;
char a= '\0 ';
以上两种操作完全等价
以下三种操作也完全等价
char a= '0 ';
char a= '\48 ';
char a=48;
但是上下两种操作完全不等价!

[解决办法]
1.比较的是ASCII值.
2.前者是数字,后者是字符.
[解决办法]
'\0 '就是整数0
但字符 '0 '就不一样了

你看看ASCII码表,好好研究一下吧
[解决办法]
字符串中a[i]是个0 不会跳出循环
但整型数组中的a[i]是个0会跳出循环

热点排行