gpt4 book ai didi

c++ - Char* 到字符串 c++(结果不是预期的)

转载 作者:行者123 更新时间:2023-11-30 01:20:51 27 4
gpt4 key购买 nike

我已经花了 4 个小时试图解决这个问题,但我做不到。我有这个功能:

  string getRuta(int i, char* buffer, string directorio) {
int j = 0;
string nom;
char s;
do {
s = (char) buffer[i];
nom[j] = s;
j++;
i++;
} while (buffer[i] != 13);
nom[j] = '\0';
char *cstr = new char();
strcpy(cstr, directorio.c_str());
strcat(cstr, nom.c_str());
printf("%s\n",cstr);
string ruta = cstr;
printf("%s\n",ruta.c_str());
return ruta; }

我不明白为什么,但在第一次打印时我得到了预期的输出,但第二次打印了一些奇怪的东西。我给你函数输入和打印结果。

buffer = "分享 feo"directorio = "/home/demian/archredes/"首次打印:/home/demian/archredes/feo第二次打印:/home/demian/archredes/fA

谢谢!

最佳答案

您通过修改 std::string 结束后的字符(nom[j] = 行)来调用未定义的行为。您应该改用它的 push_back 成员函数,并直接连接您的字符串,而不是使用 char 缓冲区。

此外,您只分配一个字符,然后 strcpy 远远超过它...并泄漏其指针。

此外,您使用魔数(Magic Number)代替字符常量 \r

这是一个更正(并且更简单)的版本:

string getRuta(int i, char const* buffer, string directorio) {
string nom;
char c;
do {
c = buffer[i];
nom.push_back(c);
i++;
} while (buffer[i] != '\r');

string ruta = directorio + nom;
printf("%s\n",ruta.c_str());
return ruta;
}

关于c++ - Char* 到字符串 c++(结果不是预期的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com