题目要求
有以下程序
main()
{ char a[7]="a0\0a0\0"; int i,j;
i=sizeof(a); j=strlen(a);
printf("%d %d\n",i,j);
}
程序运行后的输出结果是?
思路分析
这个题考的是基础,难度不大,不过比较考验功底
strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
到题目里来看,第一个'\0'之前只要'a','0',所以此时j应该等于2
在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。简单的说其作用就是返回一个对象或者类型所占的内存字节数。
到题目里面来看 sizeof(a),数组a占7个字节,此时i应该等于7
撸写代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[7]="a0\0a0\0";
int i,j;
i=sizeof(a);
j=strlen(a);
printf("i=%d j=%d ",i,j);
return 0;
}
验证结果
那么我们将数组a定义10个字节, 并且删除第一个'\0',此时i应该为10,j应该为4
和分析的结果一模一样的