使用文件路径填充WCHAR数组

时间:2014-04-28 14:47:50

标签: c++ arrays

我正在尝试使用C ++中的几个文件路径填充WCHAR数组,但我似乎无法理解如何操作。

我现在怎么做:

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

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

先谢谢。

2 个答案:

答案 0 :(得分:1)

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

如果您不想对原始类型和尺寸感兴趣,也可以使用std::vector<std::wstring>>

编辑:Johnny Mopp的评论也会起作用并且不那么脆弱,因为它不需要你修复第二个维度。我推荐这个超出我原来的建议。

答案 1 :(得分:1)

有了这个定义:

WCHAR WallTextureArray[] = { ...

您定义了WCHAR&#39; s的数组,即字符串

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

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

(由于这些是字符串文字,你无法修改它们,我已添加const。)


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

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],如果需要指向原始C样式NUL终止字符串的指针(例如,对于使用C API的互操作),则可以调用std::wstring方法。

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

std::vector::push_back()