使用文件路径填充WCHAR阵列

Fill a WCHAR array with filepaths

本文关键字:WCHAR 阵列 填充 路径 文件      更新时间:2023-10-16

我试图用C++中的几个纹理文件路径填充WCHAR数组,但我似乎不明白如何做到这一点。

我现在是怎么做的:

WCHAR WallTextureArray[]={L"../Engine/data/wall01.dds",L"../Engine/data/wall02.dds"};

这根本不是在编译。如果我只使用一个文件路径,它会用一个字符填充数组的每个索引,并且我需要WallTextureArray[0]来包含完整的文件路径,依此类推

提前感谢。

使用此定义:

WCHAR WallTextureArray[] = { ...

您定义了一个WCHAR的数组,即字符串

如果您想要一个字符串数组,那么您可以定义一个指向WCHAR s的指针数组:

const WCHAR* WallTextureArray[] = { 
    L"../Engine/data/wall01.dds",
    L"../Engine/data/wall02.dds"
};

(由于这些是字符串文字,您不能修改它们,所以我添加了const。)


请注意,在现代C++中,您可能希望使用方便的容器类,如std::vector,而不是原始C样式数组,并将std::wstring用于基于WCHAR的字符串,例如

#include <string>   // For std::wstring
#include <vector>   // For std::vector
....
std::vector<std::wstring> WallTextureArray = {
    L"../Engine/data/wall01.dds",
    L"../Engine/data/wall02.dds"
};

您可以使用常见的[]语法访问数组中的单个字符串(例如,WallTextureArray[0]是第一个字符串,WallTextureArray[1]是第二个字符串,等等)

此外,在给定std::wstring的情况下,如果需要指向以NUL结尾的原始C样式字符串的指针(例如,对于与C API的互操作),则可以调用std::wstring::c_str()方法。

您还可以向矢量添加更多字符串,例如使用std::vector::push_back()方法:

WallTextureArray.push_back(L"../Engine/data/another_wall.dds");

您的代码声明了一个宽字符的一维数组,但您需要一个2d(wchars数组的数组)。第一个维度是字符串的数量,第二个维度是任何字符串的最大长度。因此,也许WCHAR WallTextureArray[][50]会给你想要的(至少在你有一个超过49个字符的文件名之前)。

如果你不想对原始类型和大小大惊小怪,你也可以使用std::vector<std::wstring>>

编辑:Johnny Mopp的评论也会起作用,而且不那么脆弱,因为它不需要你修复第二维度。我建议这样做,而不是我最初的建议。