
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中附加到缓冲区所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)