空格和空字符探究
1.别把空格和空字符混为一谈!!
#include <iostream> #include <string.h> using namespace std; int main( { char string[] = "aaa "; int len = strlen(string); int size = sizeof(string); cout<<len<<endl; cout<<size<<endl; return 0; }
输出:
5
6
为什么len不是3呢??strlen不是遇到空字符‘\0’就结束吗??
查了一下ASCII码表,恍然大悟。之前竟然一直把两者混为一谈。


一个是0 一个是32
注意:系统会在“aaa ”后面再'\0'。所以sizeof的值为6。
2.“”和“\0”也是不一样。
int main() { char data[] = ""; //printf("%d\n",data[0]); //printf("%d\n",'\0'); int len = strlen(data); int size = sizeof(data); printf("len:%d\n",len); printf("size:%d\n",size); return 0; }
输出:
0
1
char data[] = "\0"; //printf("%d\n",data[0]); //printf("%d\n",'\0'); int len = strlen(data); int size = sizeof(data); printf("len:%d\n",len); printf("size:%d\n",size); return 0;
输出:
0
2
这里,既然空字符和'\0'的值都是0,,那么为什么上面两个程序的输出不一样呢??
因为,虽然两者的值是一样的,但是在内存中存储确实不一样的。
char data[] = "";
系统会在内存中加入'\0'。所以sizeof为1;
而,char data[] = "\0";
因为在内存中首先就有一个'\0'之后,系统又会在末尾添加一个'\0',所以sizeof为2.

红色部分为系统自动添加的。
但是两者的strlen都为0

浙公网安备 33010602011771号