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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
bonbo

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

#1

投稿記事 by bonbo » 13年前

以下のようなコードをかいたのですが、うまくいきません。
どこがおかしいのでしょうか。

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

コード:

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内にかいてあります。

よろしくお願いします。

bonbo

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

#2

投稿記事 by bonbo » 13年前

書き忘れていました。すみません。
環境はXcode4.4です。
また'¥0'でなくて'\0'と入力してあります。そもそもXcodeで'¥0'は認識してくれませんが。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#3

投稿記事 by h2so5 » 13年前

%lsという指定子は存在しません。

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

bonbo

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

#4

投稿記事 by bonbo » 13年前

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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#5

投稿記事 by h2so5 » 13年前

ドキュメントをちゃんと読みましょう。答えはそこに書いてあります。

%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);

bonbo

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

#6

投稿記事 by bonbo » 13年前

>ドキュメントをちゃんと読みましょう。答えはそこに書いてあります。
すみません、ありました。
言い訳なのですが、
iOSでのwchar_t:UTF-16
windowsでのwchar_t:UTF-8
と勘違いしていました。すみません。

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

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

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

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

#7

投稿記事 by ISLe » 13年前

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る