ページ 11

C言語 ひらがな入力

Posted: 2012年12月23日(日) 14:31
by locale.hを使った男
C言語のひらがなの文字コードを表示するプログラムを作成したいです。

コード:

#include <stdio.h>
#include <locale.h>
int main(void){
 int i;
  省略
   setlocale(LC_CTYPE,"JAPANESE");
     wchar_t   a2;
     wchar_t  *a;
      
     a2=L'あ';
   

  for(i=0; i<sizeof(cset2);i+=1){
    printf("'%c'=%02X '%c'=%02X%c%c\n",cset2[i],cset2[i+1],a2);
                                }
   printf("!%lc\n",a2);
  省略

return(0);


            }
このプログラムをコンパイルすると、warning: character constant too longをa2=L'あ';行に指摘します。
a2に代入する書き方を、教えてください。
二年間 C言語を学んだ者です
OS Windows XP ,コンパイラ gcc (GCC) 3.2.3 (mingw special 20030504-1)
お返事お願いします。

Re: C言語 ひらがな入力

Posted: 2012年12月23日(日) 15:34
by かずま
locale.hを使った男 さんが書きました:このプログラムをコンパイルすると、warning: character constant too longをa2=L'あ';行に指摘します。
a2に代入する書き方を、教えてください。
二年間 C言語を学んだ者です
OS Windows XP ,コンパイラ gcc (GCC) 3.2.3 (mingw special 20030504-1)
省略し過ぎでコンパイルできないコードは困ります。

Windows 7、 gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
で、次のコードをコンパイルしたところ、

コード:

#include <stdio.h>
#include <locale.h>

int main(void)
{
    wchar_t  a2;
    setlocale(LC_CTYPE, "");
    a2 = L'あ';
    printf("a2 = [%lc]\n", a2);
    return 0;
}
a.c:8:10: converting to execution character set: Invalid or incomplete multibyte or wide character
というメッセージが出ました。

gcc --input-charset=cp932 a.c
でコンパイルすると、コンパイルエラーも実行時エラーもなくなりました。

setlocal は実行時の文字コードを設定することができますが、
コンパイル時の文字コードの指定には、--input-charset オプションが必要なようです。
cp932 は、シフトJIS とほぼ同じ意味だと考えていいでしょう。

Re: C言語 ひらがな入力

Posted: 2012年12月26日(水) 18:27
by locale.hを使った男
かずまさん、アドバイスありがとうございました。

Re: C言語 ひらがな入力

Posted: 2012年12月26日(水) 19:18
by たかぎ
かずま さんが書きました:setlocal は実行時の文字コードを設定することができますが、
コンパイル時の文字コードの指定には、--input-charset オプションが必要なようです。
--input-charsetオプションが使えたのは、確かGCC 3.4からだった気がします。