数组结束符问题

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

int main(int argc,char** argv)
{
char s1[] = "abcd0xyz";
printf("s1 is %s\n",s1);

char s2[] = "abcd\0xyz";
printf("s2 is %s\n",s2);

return 0;
}

结束符'\0'和0不是一样么,那为什么s1输出的是abcd0xyz而不是abcd????

s1里面的零是 '0' 字符 0, ASCII码值是 48
s2里面的 '\0' ASCII码值是0

char c=0 <==> 等价于 char c='\0';
因为 当字符型作运算的时候,是会转换成 ASCII 码来运算的,所以 c=0 赋值的时候是将ASCII值 0 赋给了 c
而如果 c='0' 则是将 ASCII 值 48 赋给 c
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-15
不一样 结束符 只有\0
首先要理解 \ 这是个转义符号 加了这个转义符号之后 原先的 意思就不是 0了

比如 你用到的 换行 \n 为什么会换行 而不是 输出n 就是因为他不具有n的意思
而 是两 个 组成的一个 换行符号
第2个回答  2011-08-15
这怎么会一样,s1中的0是字符“0”,它的ASCII码是80,也就是说在内存中是的值是80,而\0表示真正的0值,字符串到这里就会结束。这两者完全不同啊。其他的数字也是这种情况。
第3个回答  2011-08-15
他们在数值上是相等的,但是实际的意义不一样
第4个回答  2011-08-15
一个是'\0', 一个是"\0"
注意单引号和双引号, 如果不懂可以追问追问

讲详细点,谢谢