C中的ASCII字符

时间:2014-05-25 13:21:09

标签: c char ascii wchar-t

我正试图在字母中保存西里尔字母中的字符。 当我从控制台获取一个字符串时,它会成功地将它保存在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,但得到的结果相同。

2 个答案:

答案 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