空格和空字符探究

 

 

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

 

posted @ 2017-06-12 17:20  ren_zhg1992  阅读(156)  评论(0)    收藏  举报