我正试图在字母中保存西里尔字母中的字符。 当我从控制台获取一个字符串时,它会成功地将它保存在char数组中,但只是初始化它似乎不起作用。尝试运行时,我得到“programName.exe已停止工作”。
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <Windows.h>
#include <stdlib.h>
void test(){
char test = 'Я';
printf("%s",test);
}
void main(){
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
test();
}
fgets ( books[booksCount].bookTitle, 80, stdin ); // this seems to be working ok with ascii.
我尝试使用wchar_t,但得到的结果相同。
答案 0 :(得分:1)
这可以解决,
void test()
{
char test = 'Я';
putchar(test);
}
但有一个问题:由于'Я'不是ASCII字符,您可能需要先设置适当的语言环境。 此外,在所有系统上,只保证ASCII字符32-126是可打印的,并且相同的符号。
答案 1 :(得分:1)
如果您正在使用默认使用Windows-1251 codepage的俄语Windows,则可以使用旧的printf
打印编码为单个字节的字符,但您需要确保源代码使用相同的cp1251字符集。不要保存为Unicode。
但首选方法应该是使用wprintf
和宽字符串
void test() {
wchar_t test_char = L'Я';
wchar_t *test_string = L"АБВГ"; // or LPTCSTR test_string
wprintf(L"%c\n%s", test_char, test_string);
}
这次你需要将文件保存为Unicode / UTF-8