程序中有一个 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;
}```
第三种 (人工写出图片位置):
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);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。