gpt4 book ai didi

c - 段错误读取具有区域设置的宽向流

转载 作者:行者123 更新时间:2023-11-30 15:13:31 24 4
gpt4 key购买 nike

我在使用区域设置的程序中遇到问题,并使用 fgetws 函数从标准输入读取数据。

#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;
}

当输入足够长(5 个或更多字符)时,如果在 返回 之前未关闭 stdin,则会出现段错误。这是为什么?这个程序有什么问题吗?

最佳答案

怀疑fgetws(data, 2, stdin)已损坏。

fgetws(),使用这么小的缓冲区最多应该从 stdin 读取 1 个 wchar_t 并附加一个术语 (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;
}

关于c - 段错误读取具有区域设置的宽向流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34533339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com