pananning 发表于 2024-7-29 05:02

c++中两个string相加,不会去掉第一个string末尾的\0吗

调api要用c风格字符串,就用了.c_str()方法,一开始不知道,找了半天才发现被中间\0截断了,一直失败
除了自己实现,c++有没有把两个string拼接成一个c风格字符串的运算

havonz 发表于 2024-7-29 05:17

string 末尾没有 0
只有使用 .c_str() 方法转换的时候,才会有

richard_ljd 发表于 2024-7-29 07:08

我自己记忆里没有(悲),或许你可以
memcpy(buffer1,str1.c_str(),str1.length()-1);
memcpy(buffer2,str2.c_str(),str2.length()-1);
如果直接c_str会带一个\0的话那么就少复制一位?
然后用fprintf什么的拼接起来

cao777 发表于 2024-7-29 07:14

string末尾没有\0 前几天项目里string转char*时 用了很久的release模式没问题 改成debug报错才发现这个问题

only998 发表于 2024-7-29 08:24

string末尾没有\0,有的话是你创建string的时候把\0一起加入到了数据里面。

yes2 发表于 2024-7-29 09:05

    std::string str1 = "123";
    std::string str2 = "456";
    std::string str3 = str1 + str2;
    printf("%s\n",str3.c_str());
输出123456。
没有遇到你说的\0问题。你的代码和用例是什么样子的?可以贴一下

LMZQ 发表于 2024-7-29 09:07

先加完再转吧,string可以直接加的, .c_str() 后才有这个\0

jamesAbc 发表于 2024-7-29 09:10

string里面是没有\0的,你用c_str()和c_data()才会追加\0

huoxx007 发表于 2024-7-29 10:08

你是不是先将string转unsigned char *之后,再合并unsigned char *的,顺序反过来就行

Kmover 发表于 2024-7-29 10:12

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
查看完整版本: c++中两个string相加,不会去掉第一个string末尾的\0吗