9 c++
我很久以前就有别人写的大型C++项目.它包含如下代码:
string CVersion::GetVersionStr() const
{
string ret;
char VersionStr[100];
DWORD v1, v2, v3, Build;
GetVersion(&v1, &v2, &v3, &Build);
sprintf(VersionStr, "%d.%d.%d.%d", v1, v2, v3, Build);
return string(VersionStr);
}
Run Code Online (Sandbox Code Playgroud)
现在我认为由于格式说明符(%d)格式错误,此代码具有未定义的行为.
DWORD 在我的电脑上声明为
typedef unsigned long DWORD;
Run Code Online (Sandbox Code Playgroud)
我的问题是:
PS.这个软件是用10年前的Visual Studio编写的
是的,如果 DWORD 是unsigned long. 正确的格式说明符是%lu.
因为未定义的行为正是如此,所以你的第二个问题和第三个问题没有意义。
为什么不使用像 astd::stringstream和exploit这样的东西<<呢?
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |