c_str() 只读取了我的字符串的一半,为什么?我该如何解决这个问题?是字节问题吗?

c_str() is only reading half of my string, why? How can I fix this? Is it a byte issue?

本文关键字:问题 何解决 解决 字节 为什么 读取 str 我的 一半 字符串      更新时间:2023-10-16

我正在编写一个客户端程序和服务器程序。在服务器程序上,为了将结果写回客户端,我必须将字符串转换为 const char* 以将其放入 const void* 变量中以使用 write() 函数。当我检查时,字符串本身输出正确的结果,但是当我在字符串上使用 c_str() 函数时,它只会输出到字符串中的第一个变量。我提供了一些代码供参考(不确定这是否有意义)。

我已经尝试了各种不同的方法来调整琴弦,但还没有奏效。

以下是变量的声明方式:

string final;
const void * fnlPrice;
carTable* table = new carTable[fileLength];

下面是表的结构:

struct carTable
{
string mm; // make and model
string hPrice; // high price
string lPrice; // low price
};

以下是带有问题的代码片段,从更新字符串变量开始,最终,使用文本以及生成的字符串变量:

final = "The high price for that car is $" + table[a].hPrice + "nThe low 
price for that car is $" + table[a].lPrice;;
if(found = true)
{
fnlPrice = final.c_str();
n = write(newsockfd,fnlPrice, 200);
if (n < 0) 
{
error("ERROR writing to socket");
}
}
else
{
n = write(newsockfd, "That make and model is not in 
the database. n", 100);
if (n < 0) 
{
error("ERROR writing to socket");
}
}

不幸的是,您的代码没有任何意义。这可能是你的主要问题。你应该重写你的代码结束消除错误。

  • 打开所有编译器警告并消除警告。
  • 不要使用新的和指针。从不
  • 不要使用 C 样式数组。所以,带有 [] 的东西。从不。使用 STL 容器
  • 始终初始化所有变量。总是。即使您在下一行中分配了其他值
  • 不要使用像 200 这样的魔术常量(字符串的大小是 final.size())
  • 如果发生错误,则使用 strerror 打印错误文本(或兼容函数)
  • 确保数组本身和数组值已初始化
  • 要测试函数,请写入套接字 1(_write(1,fnlPrice,final.size());1 等于std::cout
  • 无需使用空指针。您可以直接使用n = _write(newsockfd, final.c_str(), final.size());

如果你想在SO上得到详细的答案,那么你需要发布你编译的代码。我已经重写了您的函数并对其进行了测试。它对我有用并打印完整的字符串。因此,代码的另一部分存在我们无法看不到的错误。