ページ 11

%lsに値が正しく入らない

Posted: 2013年3月14日(木) 17:03
by bonbo
以下のようなコードをかいたのですが、うまくいきません。
どこがおかしいのでしょうか。

何文字あるかを確認する関数

コード:

int Wcount(const wchar_t incertNstr0[256]){
    int moji=0;
    for(int i=0;i<256;i++)
        if(incertNstr0[i]!=L'\0'){
            moji++;
        }
        else{
            return moji;
        }
    return 0;
}
メインのコード

コード:

    const wchar_t str[]=L"%ls%ls";
    const wchar_t test0[]=L"ミル";
    const wchar_t test1[]=L"gai";

    NSData *data0 = [[NSData alloc] initWithBytes:str length: sizeof(const wchar_t)*Wcount(str)];         //Wcountはstrの要素数を確認する関数です。
    NSString *nstext = [[NSString alloc] initWithData:data0 encoding: NSUTF32LittleEndianStringEncoding];
    const NSString* _text=[NSString stringWithFormat:nstext,test0,test1];
    NSLog(@"%@",_text);

具体的には、
NSLogで
ミルgai
と表示させたいのに
fl0g(文字化けのfl0と、g)
と表示されてしまいます。

一応ソースコードアップロードしておきます。
http://www1.axfc.net/uploader/so/2829816
EAGLView.hの
initWithCoder内にかいてあります。

よろしくお願いします。

Re: %lsに値が正しく入らない

Posted: 2013年3月14日(木) 21:41
by bonbo
書き忘れていました。すみません。
環境はXcode4.4です。
また'¥0'でなくて'\0'と入力してあります。そもそもXcodeで'¥0'は認識してくれませんが。

Re: %lsに値が正しく入らない

Posted: 2013年3月14日(木) 22:06
by h2so5
%lsという指定子は存在しません。

https://developer.apple.com/library/mac ... fiers.html

Re: %lsに値が正しく入らない

Posted: 2013年3月15日(金) 09:16
by bonbo
>h2so5さん
ありがとうございます。
>%lsという指定子は存在しません。
%lsから%S
に書き直してみました。
2バイト文字が読み込めるようになりましたが、1文字しか読み込めません。
table2の方の一通りの修飾の文字もつけてみましたが変わりませんでした。

文字列を読み込める指定子が別にあるということでしょうか。

Re: %lsに値が正しく入らない

Posted: 2013年3月15日(金) 11:32
by h2so5
ドキュメントをちゃんと読みましょう。答えはそこに書いてあります。

%SはUTF-16の文字列を期待しています。
しかし、iOSではwchar_tはUTF-32だということを前にお話しましたよね。

コード:

    NSString *str=@"%@%@";
    NSString *test0=@"ミル";
    NSString *test1=@"gai";
    const NSString* _text=[NSString stringWithFormat:str,test0,test1];
    NSLog(@"%@",_text);

Re: %lsに値が正しく入らない

Posted: 2013年3月15日(金) 12:45
by bonbo
>ドキュメントをちゃんと読みましょう。答えはそこに書いてあります。
すみません、ありました。
言い訳なのですが、
iOSでのwchar_t:UTF-16
windowsでのwchar_t:UTF-8
と勘違いしていました。すみません。

申し訳ありません。
VCで作ったものを流用したかったので%lsのままやりたかったのです。
前にできた気がしたのですが、気のせいでした。
たいした量じゃないので置換やらプリプロセッサーやらで処理するのは簡単なのですが。

ありがとうございました。

Re: %lsに値が正しく入らない

Posted: 2013年3月15日(金) 17:31
by ISLe
bonbo さんが書きました:VCで作ったものを流用したかったので%lsのままやりたかったのです。
前にできた気がしたのですが、気のせいでした。
たいした量じゃないので置換やらプリプロセッサーやらで処理するのは簡単なのですが。
VCでも%Sがワイド文字列を要求するので共通化可能なのでは?

あとUTF-8は文字によってバイト数が異なるマルチバイト形式なのでwchar_tに採用されることはないと思います。