我有一系列文件(New1.BMP,New2.BMP,...,New10.BMP).
我需要创建一个存储上述文件名称的变量,然后在另一个代码中使用它.
我目前的代码:
int LengthFiles =10;
char FilePrefix[100]="New";//This is actually passed to the function. Am changing it here for simplicity
char str[200],StrNumber[1];//str holds the file name in the end. StrNumber is used to convert number value to character
SDL_Surface *DDBImage[9]; // This is a SDL (Simple DIrectMedia Library) declaration.
for (int l=0;l<LengthFiles ;l++)
{
itoa(l, StrNumber, 1);
strcat(str,FilePrefix);strcat(str,StrNumber);strcat(str,".BMP");
DDBImage[l]= SDL_DisplayFormat(SDL_LoadBMP(str));
}
Run Code Online (Sandbox Code Playgroud)
正如您可能看到的,我不知道如何用C++编写代码,我试图通过在线代码片段来完成这项工作.这是它应该如何在C/C++中工作,即即时创建变量.
我该如何最好地接近它?
你原来的问题标题有点误导,因为你真正想做的就是连接一个字符串和一个整数.
在C++中,您可能会这样做stringstream:
stringstream ss;
ss << "New" << l << ".bmp";
Run Code Online (Sandbox Code Playgroud)
然后得到一个string变量:
string filename = ss.str();
Run Code Online (Sandbox Code Playgroud)
最后将C字符串传递给SDL函数使用c_str():
SDL_LoadBMP(filename.c_str())
Run Code Online (Sandbox Code Playgroud)
宣言DDBImage是错误的.你需要一个长度为10的数组,但是你声明它的长度为9.如果你做LengthFiles了一个常量你可以编写SDL_Surface *DDBImage[LengthFiles],所以要确保数组的长度是正确的.
代码可能如下所示:
const int FileCount = 10;
SDL_Surface *DDBImage[FileCount];
for (int index=0; index<FileCount; index++)
{
stringstream ss;
ss << "New" << index << ".bmp";
string filename = ss.str();
DDBImage[index] = SDL_DisplayFormat(SDL_LoadBMP(filename.c_str()));
}
Run Code Online (Sandbox Code Playgroud)
如果您的文件名真的开头,New1.bmp那么您需要调整索引:
ss << "New" << index+1 << ".bmp";
Run Code Online (Sandbox Code Playgroud)
最后,如果您需要扩展它来处理在运行时确定的可变数量的文件,那么您应该使用vector<*DDBImage>而不是原始数组.使用vector<>允许您让C++标准库为您处理低级内存管理.实际上,当你在使用C++进行编程时发现自己分配内存时,你应该问自己是否已经有一些标准库的部分可以为你完成.
| 归档时间: |
|
| 查看次数: |
3611 次 |
| 最近记录: |