【发布时间】:2018-08-20 07:12:10
【问题描述】:
我想将PathFindExtensionW api 的输出分配给 WCHAR 数组。这个 api 返回一个 LPWSTR 指针。我搜索并发现将 LPWSTR 分配给 WCHAR 数组的方法如下:
WCHAR array[100] = PathFindExtensionW(,,,)
但它对我不起作用,我收到此错误:
表达式必须是可修改的左值
我使用的是 VS 2012。我的代码如下:
#include <windows.h>
#include <iostream>
#include "Shlwapi.h"
#pragma comment(lib,"shlwapi.lib")
void main(int argc, char *argv[]){
int iToSizeB = 0;
iToSizeB = MultiByteToWideChar(CP_UTF8, 0, argv[1], -1 , NULL, 0);
WCHAR lpFileAddress[260] = {0};
MultiByteToWideChar(CP_UTF8, 0, argv[1], -1, lpFileAddress, iToSizeB);
WCHAR lpDotPosition[260] = {0};
//this line must be correct but I receive error
lpDotPosition = PathFindExtensionW(lpFileAddress);
int iToSizeW = 0;
iToSizeW = WideCharToMultiByte(CP_UTF8, 0, lpDotPosition, -1, NULL, 0, NULL, NULL);
CHAR lpExtension[260] = {0};
WideCharToMultiByte(CP_UTF8, 0, lpDotPosition, -1, lpExtension, iToSizeW, NULL, NULL);
printf("the format is:\n");
printf(lpExtension);
printf("\n");
getchar();
}
这有什么问题?
感谢您的解决方案。
【问题讨论】:
-
C 不允许你分配这样的数组。如果您真的希望
lpDotPosition成为一个数组,您需要使用一个函数将数据复制到其中(例如strcpy或更安全的变体)。但我怀疑你只想要一个指针,而不是一个数组 - 试试LPCWSTR lpDotPosition;。 -
我使用数组是因为我应该使用静态内存分配。因此,
LPCWSTR声明应该是动态的。我应该如何声明该功能?将指针的字符分配给数组的每个索引? -
我不明白为什么你需要
lpDotPosition成为一个数组。
标签: c winapi visual-studio-2012 console-application