比如有如下语句:
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条评论)
登录后参与讨论