假如我定义了一个char name[40],跟据书中的描述,一个字符串是以'\0'结尾,
我的问题是,这个\0也要占一个字节,那么这个\0是在40数组中的最后一个呢?也就是
说实际上程序只允许我有39个字符,还是放在我定义的字符数组以外呢?
你说的很对,只能保存39个。
char name[40]是一个字符数组,并不是字符串,你可以写一个小程序测一下就明白了
难道你的字符串中会有'\0'字符。你是不是要把字符串变成字符数组,或者字符数组变成字符串。具体应用场景说一下
添加\0作为字符串数组结尾是标准做法,这样当你进行字符串拷贝,strcpy,strlen等系列函数时,它就会以这个作为结尾来知道字符串应该操作多长的长度
如果你不加\0,就会容易发生一些缓冲区溢出,这个也是早期攻击最容易出现的代码位置。
所以对于你的char name[40],数组,你就知道实际能够存入的有效字符是39个
给你几个链接自己参考吧
http://www.zhihu.com/question/23440081
http://blog.csdn.net/zhang2050jian/article/details/6978151
兄弟,字符串是要以'\0'为结尾了,而你声明的是一个字符数组,正如你所说你定义了name[4]你是可以获取存4个字符进行
,但是你第五个字符就不可控了(就是踩内存/内存越界),虽然你测试时name[4] = '\0'刚好,但是如果不是的话那你定位
问题是很难的。为了保证最后一个是'\0'结尾(因为你开始时已经初始化为0了),所以存储最大的是n-1
是在这40个的最后一个,它起到一个声明字符串结束的作用,当然,如果你用strcpy复制一个10字节的字符串时,那么name[9]就是\0,后面那些一般也是\0,但不排除有可能不是