永发信息网

C++ 关于string , strncpy是否会在结尾自动添加'\0'的问题

答案:2  悬赏:80  手机版
解决时间 2021-11-26 10:08
C++ 关于string , strncpy是否会在结尾自动添加'\0'的问题
最佳答案
strlen和sizeof作用于string通过字符串化c_str()得出的字符串结果都是一样的。所以用strlen时通过+1使得strncpy将最后一个结尾符拷贝过去了,但是用sizeof的时候没有+1,结果就没有最后的结尾符拷贝到p里面,输出没有碰到结尾符,才会乱码。
strncpy在msdn上的解释是:
当函数的第三个参数小于等于第二个参数的长度时,空字串不会被加到参数一的结尾。
当函数的第三个参数大于第二个参数的长度时,参数一copy完字符串后到整个空间结束全部被置为空字符。string自己提供了获取长度和容量的成员函数
str1.length();    // 获取长度
str1.capacity();  // 获取容量至于c_str()得到的东西到底是怎样的。看源码注释是说带有结尾字符的常量字符串,但是为什么在strlen和sizeof操作下和C语言的char数组不同这一点的确不太好解释。

你再查查其他资料,如果知道原因了,顺便也告诉下我...
全部回答
string的实现各不相同,建议不要用 strcpy之类的函数,有些使用了'\0',有些'\0'是被隐藏的

直接使用string::assign 等string提供的函数比较保险
比如
char str1 = "hello"
std::string str2(str1);
std::string str3;
str3.assign(str1, str1 + strlen(str1));
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
温州状元到乐清怎么坐车
怎样去除野生蘑菇里的“虫子”?
航天城中湖公园停车场地址在哪,我要去那里办
米上刻字骗人的!
临沂汽车站一青岛即墨有有走高速公路的吗
3dsmax2011场景里的网格能调小吗?
UNITY3D NGUI 在更新图集的时候报错了,是怎
成都东站邛崃山路右车道变往左转弯道.在变道
怎么挑逗女孩子的下面?
斑贴试验怎么看结果
西电保外是平均分都包括什么科目,怎么算的,
在温州装修现在要花多少钱
fscanf(fp,"%[^\n]s",&a); %[^\n]s是
柬埔寨9点多天还没黑吗?
谁知道戴莱美和蓝莓面膜进价多少钱?告知一下
推荐资讯
广州住房公积金个人比例选多少?
哪路公交车到南宁市高新区滨河路5号中盟科技
黔之驴中,驴子被老虎吃的悲剧可否避免?
有人能来帮我发条短信息吗,我被拉hei了,急
求好看的网游小说
炸整鸡的做法大全
页面英文翻译器
[2014·泉州模拟]如图,PD垂直于正方形ABCD所
为什么养虾要速溶海水晶
为什么我会觉得性是很肮脏的
两个自然数相乘,积是36的乘法算式有多少个?
OPPOa57 安装不了软件 每次安装后显示未发现
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?