在c中附加到缓冲区

在c中附加到缓冲区,第1张

概述我试图有效地将地图的内容转换为字符串以通过套接字发送.到目前为止我有这个… char buffer[1024];for (iter = my_mapy.begin(); iter != my_map.end();iter++){ sprintf(buffer, "%s|%ld|%d", buffer, iter->first, iter->second);} 虽然这是有效的,但我想知 我试图有效地将地图的内容转换为字符串以通过套接字发送.到目前为止我有这个…

char buffer[1024];for (iter = my_mapy.begin(); iter != my_map.end();iter++){    sprintf(buffer,"%s|%ld|%d",buffer,iter->first,iter->second);}

虽然这是有效的,但我想知道它是否效率低下. Google搜索将int / long / double转换为string的最有效方法导致了sprintf,这就是我使用它的原因.但我担心缓冲区的内容会被反复复制,而我只是想追加到最后.这是正确的,如果是这样,有没有更好的方法来做到这一点?性能和速度是第一优先.

谢谢!

解决方法 你是对的;你在这里提出的解决方案每次都会复制缓冲区.要做得更好,您必须使用sprintf的返回值.

char buffer[1024];char* end_of_buffer = buffer;std::size_t remaining_space = sizeof(buffer);for (auto iter = my_map.begin(); iter != my_map.end(); iter++){    int written_bytes = snprintf(end_of_buffer,remaining_space,"|%ld|%d",iter->second);    if (written_bytes > 0) {        end_of_buffer += written_bytes;        remaining_space -= written_bytes;    } else {        perror("Something is wrong with the buffer");    }}

顺便提一下,我注意到我使用了snprintf,它跟踪缓冲区的剩余长度.您应该始终使用此而不是不安全的版本.您的应用程序将不断发展,通过极大的创造力,您将找到一种溢出此缓冲区的方法.同时安全性为零额外成本.

(当然,我的意思是没有冒犯.)

总结

以上是内存溢出为你收集整理的在c中附加到缓冲区全部内容,希望文章能够帮你解决在c中附加到缓冲区所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1219559.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存