注册 登录
编程论坛 C语言论坛

sizeof和string

持剑的战士 发布于 2020-01-07 19:41, 1826 次点击
#include <stdio.h>
#include <string.h>
int main()
{
    char x[]="STRING";
    x[0]='0';
    x[1]='\0';
    x[2]=0;
    printf("%d %d\n",sizeof(x),strlen(x));  结果是7和1
    return 0;
}
有没有大佬能帮我分析一下这个程序呢?下面的x[0]和x[1],x[2]分别是什么意思呢?
3 回复
#2
吕孟伟2020-01-07 21:44
sizeof()返回字符串的大小,包含'\0';strlen()返回字符串的长度,不包含'\0'。
char x[]="STRING";初始化字符串占7个字节,长度为6;
x[0]='0':将字符串首元素设置为0;
x[1]='\0';将第二个元素设置为'\0',结束字符串,此时字符串中只有一个元素0,长度为1。
x[2]=0;已没意义。


[此贴子已经被作者于2020-1-7 21:50编辑过]

#3
forever742020-01-07 22:10
难道要我挨个提醒要看教材?
这样我怕是会有进化的趋势。
#4
bcbbcclbbc2020-01-09 23:03
问题有些笼统,只能大概给出部分解释。
字符数组与字符串
字符数组,数组元素x[0],x[1],x[2]。。。指的就是对应下标元素的值,没有什么特殊,可以用scanf函数以%d或者%c输出。

只是字符与字符串之间有区别。
而字符串是指定以字符‘\0’结尾的,处理字符串时,遇到‘\0’则说明字符串结束了。所以字符串函数strlen(x)遇到字符‘\0’结束。
sizeof(x)是计算数组x这个数据类型的内存大小。字符数组初始化,但未给出数组大小,sizeof可以算出计算机给数组x多少内存。
char x[]="STRING";

数组x初始化为一个字符串则是给数组x分配了‘S’‘T’‘R’‘I’‘N’‘G’‘\0’这7个字符的内存。
1