c – 将stringstream的内容传递给以char *作为参数的函数

c – 将stringstream的内容传递给以char *作为参数的函数,第1张

概述我有一个将ppm文件(图片格式)写入磁盘的功能.它将文件名作为char *数组.在我的main函数中,我使用stringstream和<<组合了一个文件名. *** 作符.然后,我想将此结果传递给我的ppm函数.我已经在其他地方看到过这种情况,通常采用非常复杂的方法(许多中间转换步骤). 我所做的事情在下面的代码中显示,其他人通常在临时变量的许多步骤中执行的棘手部分是(char *)(PPM_file_n 我有一个将ppm文件(图片格式)写入磁盘的功能.它将文件名作为char *数组.在我的main函数中,我使用stringstream和<<组合了一个文件名. *** 作符.然后,我想将此结果传递给我的ppm函数.我已经在其他地方看到过这种情况,通常采用非常复杂的方法(许多中间转换步骤). 我所做的事情在下面的代码中显示,其他人通常在临时变量的许多步骤中执行的棘手部分是(char *)(PPM_file_name.str().data()).这样做是通过.str()从stringstream PPM_file_name中提取字符串,然后使用.data()获取指向其实际内容的指针(这是一个const char *),然后将其转换为常规(char *).下面有更完整的例子. 到目前为止,我发现以下工作正常,但它让我感到不安,因为通常当其他人以一种看似更复杂的方式做某事时,这是因为这是一种更安全的方式.那么,任何人都可以告诉我,我在这里所做的事情是否安全以及它的便携性如何? 谢谢.

#include <iostream>#include <sstream>#include <stdio.h>#include <string>using namespace std;int main(int argc,char *argv[]){    // String stream to hold the file name so I can create it from a serIEs of other variable    stringstream PPM_file_name;     // ... a bunch of other code where int ccd_num and string cur_ID_str are created and initialized    // Assemble the file name    PPM_file_name << "ccd" << ccd_num << "_" << cur_ID_str << ".ppm";    // From PPM_file_name,extract its string,then the const char* pointer to that string's data,then cast that to char*    write_ppm((char*)(PPM_file_name.str().data()),"ladyBUG_vIDcapture.cpp",rgb_images[ccd_num],wIDth,height);                       return 0;}
解决方法 这看起来像是一个没有编写const-correct代码并且具有连锁效应的典型案例.你有几个选择:

>如果write_ppm在你的控制之下,或你所知道的任何人的控制,让他们使它成为const corrct>如果不是,你可以保证它永远不会改变文件名然后const_cast>如果你不能保证,将你的字符串复制到std :: vector加上null终止符并传递& vec [0](其中vec表示矢量变量的名称)

总结

以上是内存溢出为你收集整理的c – 将stringstream的内容传递给以char *作为参数的函数全部内容,希望文章能够帮你解决c – 将stringstream的内容传递给以char *作为参数的函数所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/langs/1213276.html

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

发表评论

登录后才能评论

评论列表(0条)

保存