c_str() 只读取了我的字符串的一半,为什么?我该如何解决这个问题?是字节问题吗?
c_str() is only reading half of my string, why? How can I fix this? Is it a byte issue?
我正在编写一个客户端程序和服务器程序。在服务器程序上,为了将结果写回客户端,我必须将字符串转换为 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上得到详细的答案,那么你需要发布你编译的代码。我已经重写了您的函数并对其进行了测试。它对我有用并打印完整的字符串。因此,代码的另一部分存在我们无法看不到的错误。
相关文章:
- Project Euler问题4的错误解决方案
- 在java中解决这段代码时面临循环中的问题
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 难以理解某些人解决IOI问题的源代码
- 节俭并发:未解决的外部问题
- IpOpt拒绝解决不受约束的问题
- 如何解决这个超硬恒星的创造问题
- 循环无限运行C++解决骑士之旅问题
- 使用 bfs 解决连接组件问题时得到错误的答案
- 如何解决 Ninja c++ 构建和执行问题
- 无法在问题解决方案中执行输出逻辑
- 如何在不到O(N)的时间内解决这个问题?
- 错误LNK2005无法解决问题的解决方案
- 如何在代码问题中解决此问题 代码强制
- win10 尝试在我运行它时寻找问题的解决方案
- 人们如何提出按位问题的解决方案?
- C++ SQLite3 查询问题未解决
- "sum root to leaf numbers"问题的解决方案
- 这个问题怎么解决,回溯?向量?
- 几个模板问题(已经解决了…只是想知道为什么)