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

时间:2025-03-08 09:09:56

程序中有一个 SDL_image 的函数

SDL_Surface *IMG_Load(const char *file);

它需要一个 const char * 的字符串,来读取硬盘上的图片文件。

我本地的图片文件名格式为 , , ...,所有文件名前缀一致,数字递增。

因为需要在多个文件 / 函数中读取图片位置,我定义了一个全局数组,把文件名存储在数组中。

想到以下三种方式实现文件名读取,但觉得三种都太复杂。

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

#include

#include

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%", 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

#include

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([i], "my%", i);

}

return arr;

}

int main()

{

IMG_ARR my = file_name();

for (unsigned i = 0; i < img_num; ++i) {

cout << [i] << endl;

}

return 0;

}

第三种 (人工写出图片位置):

#include

using namespace std;

const char *myimg[] = {

"", "", "",

// ...

};

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%", i);

也会显得很冗杂,是否有更好的方式去读取文件名?