name[sizeof(name)-1]='\0'有没有一样》?why?
int main()
{
char *pName="No name";
char name[40];
size_t p = sizeof(name);
cout<<"构造新同学:"<<pName<<endl;
strncpy(name,pName,p);
name[sizeof(name)-1]='\0';
cout << name << endl;
}
就这么个代码,name[sizeof(name)-1]='\0'; 这一句删除之后,name的输出 还是正常的 NO name, 而不是我预想到的No name烫烫烫烫烫。。。。。
0单步运行时发现,在strncpy(name,pName,p);之后,name 就是 NO name000000000,貌似已经自动给了\0的结束符了。。
求解释。。
[解决办法]
strncpy
语法:
#include <string.h>
char *strncpy( char *to, const char *from, size_t count );
功能:将字符串from 中至多count个字符复制到字符串to中。如果字符串from 的长度小于count,其余部分用'\0'填补。返回处理完成的字符串。
strcpy
语法:
#include <string.h>
char *strcpy( char *to, const char *from );
功能:复制字符串from 中的字符到字符串to,包括空值结束符。返回值为指针to。
[解决办法]
2楼贴出了strncpy的描述了。可以结贴了。
[解决办法]
char name[40]; 在栈上分配,貌似有写平台编译器会自动清零。如果是堆上分配的就不一定了。
[解决办法]
如果字符串from 的长度小于count,其余部分用'\0'填补
自动填充了.
另外,你可以改为
char *pName="No name";
char name[4];
然后试一试
[解决办法]
自动在字符串结束后添加了‘\0’