- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下代码行在 Visual Studio 2010 中产生垃圾:
swprintf(buf, L"Value is %s", "abcd");
但是,相同的代码在 Linux 上运行良好。
通过试用,我可以在 Visual Studio 下使用 %S 而不是 %s 来使其工作。
swprintf(buf, L"Value is %S", "abcd");
我想知道这是 Visual Studio 2010 中的错误还是我遗漏了什么。问候。
最佳答案
这是一个“错误”,尽管该行为是设计使然。宽字符串 printf 和 scanf 函数的初始 Visual C++ 实现早于它们在 C 中的标准化,并且在某些情况下,行为偏离了 C 标准库规范的要求。
在 C 标准库规范中,一个 %s
或 %c
格式说明符必须始终与 char
配对数组或元素,以及 l
当 wchar_t
时必须使用长度修饰符提供数组或元素。
在这些函数 (documentation) 的 Visual C++ 实现中,%s
和 %c
格式说明符期望“自然”宽度的相应参数。对于窄字符串 printf 和 scanf 函数,一个 char
指针或元素是必需的,对于宽字符串函数 a wchar_t
指针或元素是必需的。要传递“其他”宽度的字符串,%S
和 %C
可以使用格式说明符。或者,h
和 l
长度修饰符可用于明确指定字符串参数是窄字符串还是宽字符串。
除其他优势外,这些函数的 Visual C++ 实现使得通过 the _TCHAR
mappings in <tchar.h>
轻松迁移旧代码以使用 Unicode 字符串成为可能。 .不幸的是,标准化的内容与 Visual C++ 实现中已经实现的内容不同(我不熟悉这里的历史;可能标准化的内容与另一个实现相匹配。)。
关于c++ - 带有窄字符串的 swprintf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23572077/
我正在尝试使用 RtlStringCbPrintfW (swprintf 的安全版本),并在将 int 附加到字符串时得到意外结果。 如果我在 int 之后附加相同的字符串 - 一切正常。所以我的代码
求助!我对 C 语言一无所知,但我必须对 C 代码做一点补充。 我从 GetLastError 得到一个错误号 (int) 并将它显示到一个表单中。相反,我需要获取实际的错误字符串。 我添加了对 Fo
以下代码行在 Visual Studio 2010 中产生垃圾: swprintf(buf, L"Value is %s", "abcd"); 但是,相同的代码在 Linux 上运行良好。 通过试用,
我在 Windows 上使用 MinGW g++ 编译器(gcc 版本 4.8.1),我对 swprintf 声明感到困惑 根据 this reference应该是 int swprintf (wch
我正在修复在 linux 和 windows 上运行的遗留代码,在某些情况下,本应包含格式化内容的缓冲区小于该内容。 代码使用根据 documentation 的 swprintf size - up
我正在尝试从 javascript 执行此操作 swprintf(hexResult, L"%I64X", result);,这可能吗?这样 CityHash64('C:\Program Files
还有人遇到过这样的问题吗? swprintf_s(v, len, L"%ws", var); MessageBox(NULL, v, NULL' NULL); 消息框打印出“%ws”而不是var的内容
在调用swprintf 将char 转换为wchar 后,调用循环会触发段错误;循环 header 中的语句在循环上下文之外工作正常。 swprintf 命令基于返回值 (3, which is th
这发生在 OS X 上,但我怀疑它适用于任何 UNIX-y 操作系统。我有两个如下所示的字符串: const wchar_t *test1 = (const wchar_t *)"\x44\x00\x
我正在尝试使用 MinGW 在 Windows 上编译 Botan,但在编译期间收到以下错误: c:\qt\2010.04\mingw\bin\../lib/gcc/mingw32/4.4.0/inc
我尝试使用 swprintf(buff, 4, L"%#03x", value),但是当 value = 0 时,我得到 000 而不是 0x0。 最佳答案 您需要字面值中的“0x”,例如“0x%03
大部分时间我在 Android 上使用 UTF-8,但我最近也在测试 wchar_t。我知道 wchar_t 在早期很糟糕,但我不关心太旧的设备,所以认为现在使用 wchar_t 会很好。 测试于:
以下代码行与 Visual Studio 2013 一起运行: wchar_t test[] = L"\xffff"; wchar_t buf[100]; int ret = swprintf(
到目前为止,我已经在 visual studio 中编写了所有代码,现在我需要向其中添加一些 UI,因此我将使用 Qt。所以我在我的项目中添加了每个文件(主类除外),然后尝试使用 Qt 编译它。因为我
wide char printf 单个字符发生了什么? VS10 和 MCBS: #include #include int const maxPathFolder = MAX_PATH - 3;
我正在尝试将 char* 字符串转换为 wchar_t*。我看到这个问题已经被问了很多次,但没有解决/可移植的答案/解决方案。 按照建议here , swprintf 对我来说似乎是正确的解决方案,但
以下几行都“按预期工作”: wchar_t u[50], v[50]; swprintf(u, 50, L"%s", L"hello"); swprintf(v, 50, L"%ls", L"good
我正在编写一个 Excel 插件,需要生成 wchar_tExcel 的输出(尽管在内部,我们是 100% char,并且实际上将 char 限制为纯 ASCII)。有一次,我正在使用swprintf
我有一个多平台项目,它在 mac 上编译得很好,但是在 Windows 上,我所有带有 %s 的 swprintf 调用都在寻找 wchar_t 而不是 char * 我通过它。结果 M$ 认为在宽字
在尝试转换一些现有代码以支持 unicode 字符时,突然出现了这个问题。如果我尝试将 unicode 字符(在本例中使用欧元符号)传递给任何 *wprintf 函数,它将失败,但似乎只在 xcode
我是一名优秀的程序员,十分优秀!