空字符串、'\0'、0与NULL的区别以及数组清零的特点分析
2013-11-25 11:34
501 查看
空字符串与NULL的区别:
NULL说明:1、等价于没有任何值、是未知数。2、NULL与0、空字符串、空格都不同,NULL没有分配存储空间。3、对空值做加、减、乘、除等运算操作,结果仍为空。还可以这么理解:
空字符串(" "):已经分配了存储空间,只是没有存储东西而已。NULL:没有分配存储空间。没有内存空间的话是不能对变量或对象进行操作的,否则会出现异常。
字符'0'的ASCII是48,空格的ASCII是32, NULL(空字符)的ASCII是0。
'\0'表示对字符'0'进行转义,转义之后则表示特殊的含义:字符串结束标志符。
例子1:
a:
void main() { char arr[100]={0,' ',97,' ',48,' ',49};//定义一个字符数组 if(arr[0]==NULL)//#define NULL 0(其实是系统已定义好的) { cout<<"打印出字符数组:"<<arr<<endl; } cout<<"字符数组长度为:"<<strlen(arr)<<endl; system("PAUSE"); }//字符数组d[ ]中的第一个元素为0,0直接作为ASCII码值保存,表示为NULL ,所以输出为空。
b:
void main() { char arr[100]={0,' ',97,' ',48,' ',49}; if(arr[0]=='\0')//注意此处比较的值是字符串结束符 { cout<<"打印出字符数组:"<<arr<<endl; } cout<<"字符数组长度为:"<<strlen(arr)<<endl; system("PAUSE"); }
//通过以上示例a与b:说明'\0'与0等价,都表示NULL
总结:0=='\0'==NULL
[b]如果你还不信,请再看下面一个例子:
[/b]
void main() { char arr[100]; if(0=='\0')//该处证明了0与'\0'等价 { arr[0]=0;//将数组清零 cout<<"打印出字符数组:"<<arr<<endl; } cout<<"字符数组长度为:"<<strlen(arr)<<endl; system("PAUSE"); }
例子2:
void main() { char arr[100]={0,' ',97,' ',48,' ',49};//定义一个数组,其中' '表示空格,空格占用一个字符 arr[0]='0';//注意此处传入的值为字符0,而不是数字0哦 cout<<"打印出字符数组:"<<arr<<endl; cout<<"字符数组长度为:"<<strlen(arr)<<endl; system("PAUSE"); }
//其中(97,48,49)作为ASCII码值保存到内存中,表示为(字符’a‘,字符’0‘,字符’1‘)
例子3:
void main() { char arr[100]=" "; //定义一个字符串,空了3格 cout<<"打印出字符数组:"<<arr<<endl; cout<<"字符数组长度为:"<<strlen(arr)<<endl; system("PAUSE"); }//一个空格占一个字符哦
例子4:
void main() { char arr[100]={'0',48}; if(arr[0]==0)//条件不成立,因为0与'0'是不一样的哦,0表示NULL,而'0'表示单字符0 { cout<<"打印出字符数组:"<<arr<<endl; } cout<<"字符数组长度为:"<<strlen(arr)<<endl; system("PAUSE"); }
例子5:
void main() { int a='0';//定义一个整型变量a char b=48;//定义一个字符变量b; cout<<a<<endl; cout<<b<<endl; system("PAUSE"); }//此例说明字符0是以ASCII码值48保存到内存中的,然后赋值给了a;而48直接作为ASCII码保存到内存中,表示字符0,然后赋值给了b;
清零函数ZeroMemory的使用 :
void main() { char arr[100]="235a678944"; ZeroMemory(arr+2,1);//以arr为首地址,地址加1后作为新地址,然后将前5所在的位置清零 if(arr[0]==50) //字符2的ASCII码值是50; { cout<<"第一次测试结果如下:"<<endl; cout<<"数组内容长度为:"<<strlen(arr)<<endl; } if(arr[2]==0) //测试是否将5所在的位置清零 { cout<<"第二次测试结果如下:"<<endl; cout<<"数组内容长度为:"<<strlen(arr)<<endl; } if(arr[3]==97)//97作为ASCII码表示字符'a' { cout<<"hello world"<<endl; } system("PAUSE"); }
相关文章推荐
- 字符串中sizeof和strlen的区别,以及'\0'与NULL的区别
- a和&a的区别以及数组和指针的用法
- java 集合 之 链表和线性表以及ArrayList的各方法的介绍及示例 及 ArrayList与LinkedList的区别分析 及 ArrayList与Array(数组)的区别
- Hashmap和hashtable三大区别(从源码角度分析为什么map可以存放一个key为null,多个值为null)的特点
- 数组和指针的区别(a和&a以及&a[0]的区别)
- PHP数组合并+与array_merge的区别分析 & 对多个数组合并去重技巧
- string.empty,""以及null的区别
- java--空字符串""和null的区别
- JAVA中isEmpty和null以及""的区别
- c语言中字符串常见初始化时的问题,以及字符串数组与指针区别的分析
- Java中String类的isEmpty方法、null以及""的区别
- String中的null,"",以及String s;等等的区别详解
- NULL, '\0',0 '0'的区别
- NULL, '\0',0 '0'的区别
- JAVA中isEmpty和null以及""的区别
- NULL, '\0',0 '0'的区别
- JAVA中isEmpty和null以及""的区别
- PHP数组合并+与array_merge的区别分析 & 对多个数组合并去重技巧
- C语言中空格,空字符,字符数组结束符,NULL,空字符串的区别
- NULL, '\0',0 '0'的区别