c字符串的疑问

来源:百度知道 编辑:UC知道 时间:2024/05/22 16:35:14
char* c="smile";这样smile后面是否有'\0'吗?
而char c[]="smile";这样smile后面是否有'\0'吗?

1,有'\0'
2,也有。
第一个你sizeof的时候就知道了,是5,但是不把0放在内,是遇到0就结束。
第二个你输出的时候是若是%c也可以输出c[5],但是是乱码。
若果你输出是%s那么输出是smile,\0只是一个你用来判断串是否结束的标志。

两个半角引号中的字符串"smile"是包括最后的'\0'的。(“smile后面是否有'\0'吗”提法不太确切。)
而char* c="smile";只是对char*型指针c赋值为"smile"的首地址而已,"smile"是常量,作为字符串它本身已经包括了最后的'\0'。在引用c时,相当再次使用了这个常量。
char c[]="smile";则是定义字符数组,并用常量"smile"初始化,自然这里"smile"也包括最后的'\0'。这条语句执行完毕后数组c的实际内容为's','m','i','l','e','\0',和常量"smile"的内容一致,但是不同的数据实体。

两个都有
#include<stdio.h>
#include<stdlib.h>
void main()
{
char *c="smile";

printf("%c\n",*(c+5));

}
这样就好理解了