0

我正在编写一个客户端程序和服务器程序。在服务器程序上,为了将结果写回客户端,我必须将字符串转换为 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,使用文本以及生成的字符串变量:

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");
        }
    }
4

1 回答 1

0

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

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

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

于 2019-07-21T08:19:41.223 回答