返回c中的WCHAR[]



我用C写了以下代码:

#include <windows.h>
#include <stdio.h>
WCHAR* test(){
WCHAR var[256];
int nSize = GetEnvironmentVariableW(L"SystemRoot", NULL, 0);
GetEnvironmentVariableW(L"SystemRoot", &var, nSize);
wprintf(L"%sn", var);
return var;
}
int main() {
WCHAR* var = test();
wprintf(L"%sn", var);
return 0;
}

当我在Visual Studio中编译并运行它时,它按预期工作。它在main函数和test函数中打印结果两次。输出:

C:Windows
C:Windows

但是当我在linux上使用mingw编译器通过命令

编译它时
i686-w64-mingw32-gcc -o test.exe -O3 -Os -static -s test.c

输出如下:

C:Windows
(null)

为什么test()函数返回NULL当我使用mingw和做什么使它正常工作?谢谢。

你不能返回一个局部变量的地址,你会得到一个编译器警告(这实际上是一个错误)。

你想要这个:

#include <windows.h>
#include <stdio.h>
WCHAR* test(WCHAR var[], int nSize) {
GetEnvironmentVariableW(L"SystemRoot", var, nSize);
wprintf(L"%sn", var);
return var;
}
int main() {
// declare var outside the test function
WCHAR var[256];
// pass the address of var to test
test(var, 256);
wprintf(L"%sn", var);
return 0;
}

但要注意256(如var[256])可能不够。我把妥善解决这个问题留给你作为练习。

相关内容

  • 没有找到相关文章

最新更新