main() { char x[]="string"; x[0]=0; x[1]='\0'; x[2]='0'; printf("%d %d\n",sizeof

请问一下,main() { char x[]="string"; x[0]=0; x[1]='\0'; x[2]='0'; printf("%d %d\n",sizeof(x),strlen(x)); }
最新回答
花月似霰

2024-09-18 00:22:43

x[0]定义的是char型,也就是字符型
x[0]=0指的是ASCII为0的字符也就是null和'\0'是一样的
珍藏版╮宝贝

2024-09-18 05:24:54

strlen(x) 返回的是x中字符的个数,不包括空操作符;
晚街

2024-09-18 03:25:08

具体是这样的:
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); }
雪紫∮冰雨

2024-09-18 03:44:29

2