在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)
这里有什么问题?我错过了什么?谢谢.
实现wcslen()返回字符串中宽字符的数量,而不是它占用的字节数.并且malloc()需要多个字节......
因此,您需要将宽字符数乘以宽字符的大小,然后再将其传递给malloc():
filename = (char *) malloc( (wcslen(argv[(i + 1)]) + 1) * sizeof(wchar_t));
但是,然后,你将它转化为(char *).如果argv声明为char *argv[]或者char **argv,那么wcslen()无论如何都要使用错误的函数:你需要strlen().
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |