【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.20561

mbstowcs関数について
投稿者---とし(2005/04/05 16:32:55)


mbstowcs関数が良く分かりません。
調べて分かったことは
変数内に格納されている文字列をワイド文字に変換する関数だということなのですが、例えば
setlocale(LC_ALL,"");
mbstowcs(strCmdLine,lpCmdLine,strlen(lpCmdLine)+1);とあったとすると
どのような動きをしているのかが分かりません。
どうかご教授お願いします


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:mbstowcs関数について 20563 もぐりん 2005/04/05 16:56:35
<子記事> Re:mbstowcs関数について 20565 nop 2005/04/05 16:59:30
<子記事> Re:mbstowcs関数について 20575 かずま 2005/04/06 02:34:43


No.20563

Re:mbstowcs関数について
投稿者---もぐりん(2005/04/05 16:56:35)


たしかSJIS->UNICODE変換だったと思います。
char型の配列をwchar_t型に変換して成功した文字数をreturnする仕様です。
失敗した場合は-1を返します。
googleで検索すれば説明がいっぱい出てきますが読みましたか?

>mbstowcs関数が良く分かりません。
>調べて分かったことは
>変数内に格納されている文字列をワイド文字に変換する関数だということなのですが、例えば
>setlocale(LC_ALL,"");
>mbstowcs(strCmdLine,lpCmdLine,strlen(lpCmdLine)+1);とあったとすると
>どのような動きをしているのかが分かりません。
>どうかご教授お願いします



この投稿にコメントする

削除パスワード

No.20565

Re:mbstowcs関数について
投稿者---nop(2005/04/05 16:59:30)


>mbstowcs関数が良く分かりません。
>例えば
>setlocale(LC_ALL,"");
>mbstowcs(strCmdLine,lpCmdLine,strlen(lpCmdLine)+1);とあったとすると
>どのような動きをしているのかが分かりません。

マルチバイト文字列を対応するワイド文字列に変換します。
「マルチバイト文字」、「ワイド文字」がわからない場合は、
IT用語辞典 e-Words」などで調べましょう。


この投稿にコメントする

削除パスワード

No.20575

Re:mbstowcs関数について
投稿者---かずま(2005/04/06 02:34:43)
Re:mbstowcs関数について


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
 
int main(void)
{
    char mb1[16], mb2[16], *locale;  wchar_t wcs[16];  int n1, n2, i;
 
    locale = setlocale(LC_CTYPE, "");
    printf("   locale = %s\n", locale);
 
    memset(mb1, 0x55, sizeof mb1);
    memset(mb2, 0x66, sizeof mb2);
    memset(wcs, 0x77, sizeof wcs);
    strcpy(mb1, "abcあい");
 
    n1 = mbstowcs(wcs, mb1, sizeof wcs / sizeof *wcs);
    n2 = wcstombs(mb2, wcs, sizeof mb2);
 
    for (i = 0; i < 16; i++) printf(" %02x", mb1[i] & 0xFF);
    printf("\n   strlen(mb1) = %d\n", strlen(mb1));
 
    for (i = 0; i < 8; i++) printf(" %08x", wcs[i]);
    printf("\n   n1 = %d\n", n1);
 
    for (i = 0; i < 16; i++) printf(" %02x", mb2[i] & 0xFF);
    printf("\n   n2 = %d\n", n2);
 
    return 0;
}
----------------------------------------------------------------------
Windows 98/2000/XP, Borland C++ 5.5.1 での実行結果
 
   locale = LC_CTYPE=Japanese_Japan.932
 
 61 62 63 82 a0 82 a2 00 55 55 55 55 55 55 55 55
   strlen(mb1) = 7
 00000061 00000062 00000063 00003042 00003044 00000000 00007777 00007777
   n1 = 5
 61 62 63 82 a0 82 a2 00 66 66 66 66 66 66 66 66
   n2 = 7
 
----------------------------------------------------------------------
Linux (Fedora Core 1), gcc 3.3.2 での実行結果
 
locale = ja_JP.UTF-8
 61 62 63 e3 81 82 e3 81 84 00 55 55 55 55 55 55
   strlen(mb1) = 9
 00000061 00000062 00000063 00003042 00003044 00000000 77777777 77777777
   n1 = 5
 61 62 63 e3 81 82 e3 81 84 00 66 66 66 66 66 66
   n2 = 9
----------------------------------------------------------------------
 
これから何がわかりますか?
あなたの考えたことを、間違っても構いませんから、書いてみてください。
 
また、どうしても分からないことがあれば、質問してください。
その場合、【掲示板ご利用上の注意】に従った質問ならば、回答します。



この投稿にコメントする

削除パスワード

No.20591

Re:mbstowcs関数について
投稿者---とし(2005/04/10 21:15:06)


ずっと考えてみたのですが、全然分かりませんでした。
知らない関数などが多かったので、もっと実力的に
大きくなってから、また挑戦してみます。
レス遅れてすいませんでした。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧