请问一下,main() { char x[]="string"; x[0]=0; x[1]='\0'; x[2]='0'; printf("%d %d\n",sizeof(x),strlen(x)); }
具体是这样的:C语言里面,字符串是一种数组,该数组索引从0开始,整个串以数值0结尾;当字符串中某个位置的值为0时,该位置就表示字符串的结尾;看前面的例子,x[0] = 0;意思是这个字符串索引0对应的位置就是结尾,即空串;相应的,x[0] = '0'; x[1] = 0;意思是串中索引0位置上有一个字符‘0’; 造成上面问题的原因是:char类型其实是一种整数,字符串比较过程中会把串中每个索引位置的内容当做数值来看待。简单讲就是:字符‘0’与数值0不相等,即下面语句中始终输出后者:/* '0'与0的区别 */if ('0' == 0) { printf("equal: char=%d int=%d.\n", '0', 0); }else { print("unequal: char=%d int=%d.\n", '0', 0); } /* '\0' 与0的区别 */if ('\0' == 0) { printf("equal: char=%d int=%d.\n", '0', 0); }else { print("unequal: char=%d int=%d.\n", '0', 0); }