- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
按照 opengl-tutorial.org 上的教程进行操作,意识到我不能直接用 printf 打印着色器编译日志,因为我是在 Windows 桌面应用程序中这样做的。我尝试使用此方法将其转换为 LPWSTR:
//compile the shader
glShaderSource(fShader, 1, &pFsCode, NULL);
glCompileShader(fShader);
//check shader compilation
glGetShaderiv(fShader, GL_COMPILE_STATUS, &result);
glGetShaderiv(fShader, GL_INFO_LOG_LENGTH, &logLen);
if (logLen > 0) {
//get compile log
vector<char> fErr(logLen + 1);
glGetShaderInfoLog(fShader, logLen, NULL, &fErr[0]);
//try to convert log to LPWSTR
wchar_t msg[100];
swprintf(msg, sizeof(msg) / sizeof(*msg), L"%s\n", &fErr[0]);
//print it
wprintf(msg);
}
出于某种原因,我得到了这个输出:
⤱㨠剥肉素匠ㄲ›瘣剥楳汤〰洠猎⁴敢映池潾敷祭剥ੳ⠰⤲㨠剥肉素匠›湖畳灰整整整获透〳ਰ⠰⤲㨠拔牙纯匠〰〰›祳瑮硖拔牙纯湖泥数琴摥✠✨蜡数琴湖㨢∺感⁴潴敫⠢ਢ ⠰⤴㨠扒肉䌠㔷㈳
有人能告诉我为什么我得到这个损坏的输出吗?
感谢所有帮助。
最佳答案
您没有转换 char
s 至 wchar_t
使用 swprintf(..., "%s\n", ...)
因为,根据 https://msdn.microsoft.com/en-us/library/hf4y5e3w.aspx %s
意思如下:
When used with printf functions, specifies a single-byte or multi-byte character string; when used with wprintf functions, specifies a wide-character string. Characters are displayed up to the first null character or until the precision value is reached.
因为您确实在使用 *wprintf
在这里发挥作用,%s
已经期望一个宽字符串,但你给它一个非宽字符串。因此,ascii 文本(在本例中为 1) : error C0121: #version 300 must be followed by ...
)被解释为宽字符串,从而导致垃圾。
根据同一网页,%S
可能是解决您问题的最快方法(“与 wprintf 函数一起使用时,指定单字节或多字节字符串”- %s
是普通 printf 的意思)。
关于c++ - 使用 wprintf 打印 opengl 着色器编译日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51117395/
考虑这个示例程序: #include #include #include int main() { std::string narrowstr = "narrow"; std::
我正在使用 wprintf 打印不同大小的 C 字符串。 wprintf(L"%-*.*ls ", PRINTED_WORD_LENGTH, PRINTED_WORD_LENGTH, word->st
我正在尝试使用以下代码打印用于执行程序的参数: #include "stdafx.h" #include #include int main(int argc, wchar_t* argv[]) {
以下code : #include main() { int fd; fpos_t pos; printf("stdout, "); fflush(stdout
我刚刚发现 %ws 是常识(对某些人来说),用于格式化 unicode 字符串,%wZ 也是如此——但是 msdn 没有在我能找到它们的地方记录这些。有很多人在网上分别写了这些有用的 printf 格
从 main 内部,我尝试调用 ParseInput,它返回一个指向字符串的宽字符指针,我想将其 wprintf 到控制台。迄今为止,代码可以编译,但 wprintf 在调用时不执行任何操作。很简单,
AllocConsole(); consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); WriteConsoleW(consoleHandle, L"qweą
当我写一个单元测试时,我偶然发现了 glibc 的一些奇怪的行为,关于 "%p" 和 NULL 指针. 如果我有这样一行 printf("NULL pointer is %p\n", NULL);,然
按照 opengl-tutorial.org 上的教程进行操作,意识到我不能直接用 printf 打印着色器编译日志,因为我是在 Windows 桌面应用程序中这样做的。我尝试使用此方法将其转换为 L
代码: #include int main() { printf("printf\n"); wprintf(L"wprintf\n"); } https://onlinegdb.co
众所周知,要打印类型为固定宽度整数类型(如 uint32_t)之一的变量值,您需要包含 cinttypes(在C++) 或 inttypes.h(在 C 中)头文件,并使用格式说明符宏,如 PRIu3
我对 fgetws 和 wprintf 有疑问。 NULL 当之前打开的文件中有特殊字符时返回。 fgets 没有这个问题。 我尝试使用 setlocale,这里推荐:fgetws fails to
代码: #include #include #define USE_W int main() { #ifdef USE_W const wchar_t *ae_utf16 = L"\x00
我有一个包含英语和希伯来语字符的 wchar_t 数组,当我使用 wprintf() 打印它时,它只打印英文字符。当我使用 _wsetlocale(LC_ALL, L"Hebrew") 时,我得到的希
当我尝试打印版权符号 ©与 printf或 write ,它工作得很好: #include int main(void) { printf("©\n"); } #include int m
1 wprintf 将 'Ω' 显示为 3A9 (UTF16) 真的很奇怪,但是 wctomb 转换wchar 到 CEA9 (UTF8),我的语言环境默认是 en_US.utf8。正如手册页所说,它
我在代码中同时使用 printf 和 wprintf 函数时遇到问题。如果先打印常规字符串,则 wprintf 不起作用。如果我先使用 wprintf,则 printf 不起作用。 #include
在 C 程序中,我使用 wprintf 在 Windows 控制台中打印 Unicode (UTF-16) 文本。这工作正常,但是当程序的输出重定向到日志文件时,日志文件的 UTF-16 编码已损坏。
我注意到了 #include wprintf( L"Hello, %s\n", "world" ); 在 Linux 下与标准 glibc 一起工作,同样的事情与 newlib 的工作方式不同。似乎
我正在制作一个用于评估和分析传递函数的小应用程序。尽管这个主题对某些人来说可能看起来很无聊,但我希望它至少看起来特别酷、专业和很棒等等......所以: 第 1 步:给我系数! [一堆数字] 第 2
我是一名优秀的程序员,十分优秀!