【发布时间】:2019-04-01 20:57:26
【问题描述】:
#include <stdio.h>
#include <windows.h>
int main(int argc, char** argv)
{
DWORD bytes_read;
char buffer[65536];
LPSTR str;
ReadFile(GetStdHandle(STD_INPUT_HANDLE), buffer, 65536, &bytes_read, NULL);
str = malloc(bytes_read);
memcpy(str, buffer, bytes_read);
FILE *f = fopen("file.txt", "w");
fprintf(f, "stdin: %s", str);
fprintf(f, "hardcoded: %s\n", "á");
fclose(f);
return 0;
}
通过echo á|.\Program.exe在powershell中运行时,file.txt的内容为:
stdin: ?
ýýýýhardcoded: á
我有兴趣用从标准输入检索到的正确字符替换问号
【问题讨论】:
-
你有更简单的例子吗?仅仅运行你的程序应该也能正常工作。重定向似乎只是混淆了问题。
-
您的字符串不是以空值结尾的。您需要
malloc(bytes_read+1),然后您需要确保buffer[bytes_read]中有一个终止空值。 -
您正在读取文件,就像它是二进制数据一样,但打印它就像它是一个以空字符结尾的字符串。
-
1.我没有更简单的例子。 2. 我知道 ýýýý 是因为缺少空终止,但这不是这个问题的目标。我对第一个字符感兴趣
-
您正在导致未定义的行为。发生的任何事情都不会让您感到惊讶。修复明显的错误,然后重试。