c - 在 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"%s\n", var);
return var;
}
int main() {
WCHAR* var = test();
wprintf(L"%s\n", var);
return 0;
}
当我在 Visual Studio 中编译并运行它时,它按预期工作。它打印结果两次 - 在主函数和测试中。输出是:
C:\Windows
C:\Windows
但是当我通过命令使用 mingw 编译器在 linux 上编译它时
i686-w64-mingw32-gcc -o test.exe -O3 -Os -static -s test.c
它在启动后给出这个输出:
C:\Windows
(null)
为什么 test() 函数在我使用 mingw 时返回 NULL 以及如何使其正常工作?谢谢。
解决方案
您不能返回局部变量的地址,您会收到编译器警告(实际上更多的是错误)。
你要这个:
#include <windows.h>
#include <stdio.h>
WCHAR* test(WCHAR var[], int nSize) {
GetEnvironmentVariableW(L"SystemRoot", var, nSize);
wprintf(L"%s\n", 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"%s\n", var);
return 0;
}
但请注意,256(如 in var[256]
)可能还不够。我将其作为练习留给您正确解决此问题。
推荐阅读
- smooch - 启动 smooch Messenger 时如何隐藏过去的对话消息?
- linux - shell 脚本匹配来自另一个文本文件的数据
- javascript - 带有','(逗号)的console.log在javascript的输出中做了什么。我正在使用 nodejs
- python - Python Mann-Whitney 置信区间
- java - DefaultCookieSerializer.setJvmRoute 不工作
- xamarin - 如何使用 MessagingCenter 将 ToggledEventArgs 发送给订阅者?
- php - Sweetalart 不在同一页面上发布 ajax 请求
- python - 根据python中的文件名向数据框添加列
- sql - 选择总计和如果读取
- jqgrid - jqgrid设置的scrollLeftOffset是什么意思?