我在使用语言环境的程序中遇到问题,并使用project.xml
函数从stdin读取。
fgetws
当输入足够长(5个或更多个字符)时,如果我在#include <stdio.h>
#include <locale.h>
#include <wchar.h>
static const int N = 2;
int main(void) {
setlocale(LC_ALL, "");
wchar_t data[N];
fgetws(data, N, stdin);
printf("%ls\n", data);
/* fclose(stdin); */
return 0;
}
之前没有关闭stdin
,我会遇到段错误。这是为什么?这个程序有什么问题?
答案 0 :(得分:1)
怀疑fgetws(data, 2, stdin)
已被破坏。
fgetws()
,使用这样一个小缓冲区,最多只能从wchar_t
读取1 stdin
并附加一个有争议的(wchar_t) '\0'
。
像往常一样,当代码神秘失败时,最好检查函数的返回值,看看它们是否符合预期。
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
#include <assert.h>
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
static const int N = 2;
int main(void) {
char *p = setlocale(LC_ALL, "");
assert(p);
wchar_t data[N];
wchar_t *s = fgetws(data, N, stdin);
assert(s);
int i = printf("%ls\n", data);
assert(i == 2);
i = fclose(stdin);
assert(i == 0);
return 0;
}