开发者社区> 问答> 正文

C/C++ 适合用什么方式读取批量有序文件名?

程序中有一个 SDL_image 的函数
SDL_Surface *IMG_Load(const char *file);

它需要一个 const char * 的字符串,来读取硬盘上的图片文件。
我本地的图片文件名格式为 my1.jpg, my2.jpg, my3.jpg...,所有文件名前缀一致,数字递增。
因为需要在多个文件 / 函数中读取图片位置,我定义了一个全局数组,把文件名存储在数组中。
想到以下三种方式实现文件名读取,但觉得三种都太复杂。

第一种方式(利用指向二维数组的指针,传递给函数):

#include <cstdio>
#include <iostream>

using namespace std;

const unsigned img_num = 113;

typedef char (*img_arr)[20];

img_arr file_name(char (*arr)[20])
{
    for (unsigned i = 0; i < img_num; ++i) {
        sprintf(arr[i], "my%u.jpg", i);
    }
    return arr;
}

int main()
{
    char myimg[img_num][20] = {0};
    const char (*const pimg)[20] = file_name(myimg);

    for (unsigned i = 0; i < img_num; ++i) {
        cout << pimg[i] << endl;
    }
    return 0;
}

第二种(函数返回一个带二维数组的结构体,参考代码:

#include <cstdio>
#include <iostream>

using namespace std;

const unsigned img_num = 113;

struct IMG_ARR {
    char img[img_num][20];
};

IMG_ARR file_name()
{
    IMG_ARR arr;

    for (unsigned i = 0; i < img_num; ++i) {
        sprintf(arr.img[i], "my%u.jpg", i);
    }
    return arr;
}

int main()
{
    IMG_ARR my = file_name();

    for (unsigned i = 0; i < img_num; ++i) {
        cout << my.img[i] << endl;
    }
    return 0;
}```
第三种 (人工写出图片位置):

include

using namespace std;

const char *myimg[] = {

"my1.jpg", "my2.jpg", "my3.jpg",
// ...

};

int main()
{

for (unsigned i = 0; i < sizeof(myimg) / sizeof(*myimg); ++i) {
    cout << myimg[i] << endl;
}
如果资源文件的数量太多,把文件名存放在数组似乎不是一个好的想法。如果为每一个函数写类似这样的代码:

char arr[20] = {0};
for (unsigned i = 0; i < 113; ++i)

sprintf(arr, "my%u.jpg", i);

展开
收起
杨冬芳 2016-05-27 16:14:55 4182 0
4 条回答
写回答
取消 提交回答
  • 拼一下文件名字,建议看ostringstream的使用

    2020-08-03 20:24:18
    赞同 展开评论 打赏
  • 软件开发,安全加密

    直接vector读入然后传入 string.c_str()得到char*指针

    2019-07-17 19:18:13
    赞同 展开评论 打赏
  • 乐于学习与分析

    直接vector读入然后传入 string.c_str()得到char*指针

    2019-07-17 19:18:13
    赞同 展开评论 打赏
  • IT从业

    直接vector读入然后传入 string.c_str()得到char*指针

    2019-07-17 19:18:13
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载