原创 关于字符串结尾的'\0'

2011-6-14 21:18 3029 9 9 分类: MCU/ 嵌入式
比如有如下语句:  
   
  char   fname[25];  
  char   *   fn;  
  strncpy(fname,   fn,   24);  
  fname[24]   =   '\0';  
   
  想问下这里在fname最后添加'\0'就是让它成为一个字符串吗?  
   
  是不是使用strncpy语句的时候都要把最后加上一个'\0'?  
   
  如果不添加的话会对以后的输出有什么影响吗?
 
====================================
 
对,C中字符串以'\0'结尾,如果不添加'\0'系统就在内存中一直向后读,直到读到'\0'为止
 
======================================
//如果不添加用puts函数输出的时候就会有问题
=====================================
如果你得fn字符串得前24个字符有‘\0’就没必要有后面那句了;因为strncpy   遇到‘\0’就结束了。如果前24字符没有'\0'就必须加上,要不然不知道你得字符什么时候结束。可能导致越界
======================================
如果不加\0  
   
  那么如果我输入一个超长的字符传后,你程序的堆栈就会被我想要的内容覆盖掉,指向一个我想要的函数地址,嘿嘿,我想你知道了,缓冲区益处就是这么来的  
   
  可以用strncpy,或者自己写一个字符串拷贝程序,在拷贝字符之前就把结尾给填充了\0
=======================================
 
\0是字符串结束的标志,不加部分函数就无法识别结束!~  
========================================
'\0'是字符串的结束符号,使用strlen时这个函数判断  
  字符串结束标志就是以'\0'进行判断的。同样对于不加'\0'字符组合  
  其他处理字符串函数都不能正确使用。
==========================================
加‘\0'表示字符串已经结束。  
  char   *strncpy(  
        char   *strDest,  
        const   char   *strSource,  
        size_t   count    
  );  
  最后一句应该是fname[25]   =   '\0';吧!防止fn不止24个字符。  
  但是如果你只是储存这些字符的话就没有必要用fname[25]   =   '\0';如果需要输出才要用这条语句,因为如果输出的时候,他是到\0结束,如果没有一直没有遇到\0,程序就会死了!
===========================================
'\0'   可以说是一个结尾标志符,让最后一位的值等于0.  
  字符串就用这东东来判断是否结束的.

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条