-1

伝達関数を評価および分析するための小さなアプリを作成しています。主題が退屈に見えるかもしれませんが、私はそれが少なくとも非常にクールでプロで素晴らしいように見えることを望んでいます...だから:

  • ステップ1:係数を教えてください![たくさんの数字]
  • ステップ2:上付き文字を使用して多項式を記述します。[文字列内の数字の束]

したがって、適切な形式で多項式を出力するための小さなCパーサーを作成します。そのため、wchar_tその場で連結する文字列が必要です。文字列が完成したら、すぐにコンソールに印刷して、すべてが正常であることを確認し、続行します。簡単ですよね?ウェルプ、私はそれほど幸運ではありません...

wchar_t *polynomial_description( double *polyArray, char size, char var ){

    wchar_t *descriptionString, temp[100];
    int len, counter = 0;
    SUPERSCRIPT superscript;

    descriptionString = (wchar_t *) malloc(sizeof(wchar_t) * 2);
    descriptionString[0] = '\0';

    while( counter < size ){

        superscript = polynomial_utilities_superscript( size - counter );
        len = swprintf(temp, 100, L"%2.2f%c%c +", polyArray[counter], var, superscript);
        printf("temp size: %d\n", len);

        descriptionString = (wchar_t *) realloc(descriptionString, sizeof(wchar_t) * (wcslen(descriptionString) + len + 1) );
        wcscat(descriptionString, temp);

        counter++;

    }

    //fflush(stdout); //Already tried this
    len = wprintf(L"%ls\n", descriptionString);
    len = printf("%ls**\n", descriptionString);
    len = fprintf(stdout, "%ls*\n", descriptionString);
    len = printf("FFS!! Print something!");

    return descriptionString;

}

temp size: 8実行中は、デバッグ中にのみ予想される回数の印刷を確認できます。プログラムを実行すると、実行ごとに任意の回数の印刷が行われます。ただし、その後、タイトルに示されているように、wprintf、printf、およびfprintfは何も出力しませんが、len呼び出しごとにサイズを変更します。

呼び出し元関数で、(application:(UIApplication *)application didFinishLaunchingWithOptions:、テスト中に)戻り文字列を出力するためにNSLogを配置しましたが、Log部分でさえも何も取得しません。

何が起こっていますか?私は完全に途方に暮れています。

ちなみにXCode4.2を使用しています。

4

1 に答える 1

2

何も印刷していないと思われる場合のprintf/からの戻り値は何ですか? 失敗の場合は -1 を返すか、1 以上を返す必要wprintfがあります。成功した場合は、説明文字列の後に少なくとも改行文字を常に出力する必要があるためです。

  • 1つ以上を返す場合、改行は印刷されていますか? プログラムの出力を や などの 16 進ダンパーにパイプしようとしましたhexdump -Cxxd(1)?
  • -1 を返す場合、 の値はerrno?

printfがエラーで失敗していることが判明した場合EILSEQ、文字列に非 ASCII 文字が含まれている可能性が非常に高いwcstombs(3)です。これは、デフォルトの C ロケールで失敗する原因となるためです。その場合の解決策はsetlocale(3)、プログラムの起動時に UTF-8 ロケールに切り替えるために使用することです。

int main(int argc, char **argv)
{
    // Run "locale -a" in the Terminal to get a list of all valid locales
    setlocale(LC_ALL, "en_US.UTF-8");
    ...
}
于 2012-03-29T03:19:42.323 に答える