c++中两个string相加,不会去掉第一个string末尾的\0吗
调api要用c风格字符串,就用了.c_str()方法,一开始不知道,找了半天才发现被中间\0截断了,一直失败除了自己实现,c++有没有把两个string拼接成一个c风格字符串的运算
string 末尾没有 0
只有使用 .c_str() 方法转换的时候,才会有 我自己记忆里没有(悲),或许你可以
memcpy(buffer1,str1.c_str(),str1.length()-1);
memcpy(buffer2,str2.c_str(),str2.length()-1);
如果直接c_str会带一个\0的话那么就少复制一位?
然后用fprintf什么的拼接起来 string末尾没有\0 前几天项目里string转char*时 用了很久的release模式没问题 改成debug报错才发现这个问题 string末尾没有\0,有的话是你创建string的时候把\0一起加入到了数据里面。 std::string str1 = "123";
std::string str2 = "456";
std::string str3 = str1 + str2;
printf("%s\n",str3.c_str());
输出123456。
没有遇到你说的\0问题。你的代码和用例是什么样子的?可以贴一下 先加完再转吧,string可以直接加的, .c_str() 后才有这个\0 string里面是没有\0的,你用c_str()和c_data()才会追加\0 你是不是先将string转unsigned char *之后,再合并unsigned char *的,顺序反过来就行 c_str()返回一个指向以 null 结尾的字符数组的指针, 即\0作为字符串的结束标志
也就是c_str()给你加上的\0.两个方法,先处理,后输出
#include <iostream>
#include <string>
int main() {
std::string str1 = "Hello";
std::string str2 = "World";
str1.append(str2);
//printf("%s\n", str1.c_str());
size_t len = str1.size();
// 使用 fwrite 来避免 printf 在遇到 null 终止符时停止输出
fwrite(str1.data(), sizeof(char), len, stdout);
return 0;
return 0;
}
#include <iostream>
#include <string>
int main() {
std::string str1 = "Hello";
std::string str2 = "World";
str1 += str2;
//printf("%s\n", str1.c_str());
size_t len = str1.size();
// 使用 fwrite 来避免 printf 在遇到 null 终止符时停止输出
fwrite(str1.data(), sizeof(char), len, stdout);
return 0;
}
页:
[1]
2