pub*_*ess -2 c windows visual-c++
我一直在使用 C/C++ 程序在 Windows 上的 Visual Studio 中收到“0xC0000005:访问冲突读取位置错误”,并试图简化以说明我的问题。下面的代码运行得很好:
char tmp[1000];
ULONG64 val1 = 1;
sprintf_s(tmp, 1000, "%lu, %s, %s", val1, "true", "false");
Run Code Online (Sandbox Code Playgroud)
但是,当我向格式中添加额外的 unsigned long 时,会出现访问冲突,如下面的代码所示:
char tmp[1000];
ULONG64 val1 = 1;
ULONG64 val2 = 2;
sprintf_s(tmp, 1000, "%lu, %lu, %s, %s", val1, val2, "true", "false");
Run Code Online (Sandbox Code Playgroud)
MSVC 上的格式说明符%lu是unsigned long32 位而不是 64 位。
所以堆叠的参数是错误的,MSVC 应该对此发出警告。
您可以对冲,%llu但最好使用正确的格式来保证与固定宽度变量的匹配。
如果类型是uint64_t然后例如在使用时printf你应该有
printf("%" PRIu64 "\n", val1);
Run Code Online (Sandbox Code Playgroud)
例如。
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |