Windows malloc问题?

fle*_*xow -3 c++ malloc

在Windows(Visual Studio C++ 2010)中,我正在尝试进行简单的字符串复制.这是我的代码:

char * filename;
(...)
filename = (char *) malloc(wcslen(argv[(i + 1)]) + 1);
wcscpy((wchar_t *)filename, argv[i + 1]);
wprintf(L"Filename is: %s", filename);
Run Code Online (Sandbox Code Playgroud)

如果我的argv [i + 1]大于14,程序会崩溃.如果它是14或更低,它运行正常.见下文.

C:\Visual Studio 2010\Projects\test\Release>test.exe -f 12345678901234 aa asas asas
First Argument  argv[1]   -f
Argc = 6
Filename is: 12345678901234
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?我错过了什么?谢谢.

Joh*_*ger 6

实现wcslen()返回字符串中宽字符的数量,而不是它占用的字节数.并且malloc()需要多个字节......

因此,您需要将宽字符乘以宽字符的大小,然后再将其传递给malloc():

filename = (char *) malloc( (wcslen(argv[(i + 1)]) + 1) * sizeof(wchar_t));

但是,然后,你将它转化为(char *).如果argv声明为char *argv[]或者char **argv,那么wcslen()无论如何都要使用错误的函数:你需要strlen().

  • @flexow和顺便说一句,如果你发现自己正在指向这样的字符串,请退后一步并检查你的代码.您永远不需要将指针强制转换为字符串 - 这样做表明您正在尝试将一种字符串类型"转换"为另一种字符串,并且转换不会转换字符类型. (2认同)