0

私は C を使用して Android 用のネイティブ アプリを作成しています。どこかで、単純な C コードを記述した部分文字列を取得する単純な古い仕事をしたいと考えています。これはコードです:

char* get_part_allocated(const char* src, int start, int len)
{
    LOGI("copying [%s] from [%d] len [%d]\n", src, start, len);
    int nlen = len+1;
    char* alloc = (char*)malloc(nlen*sizeof(char));
    strncpy(alloc, src+start, len);
    LOGI("result is: [%s]\n", alloc);
    return alloc;
}

このコードを PC でコンパイルして実行すると、期待どおりの結果が得られますが、Android で実行すると、最後に奇妙な文字が常に含まれており、プログラムの流れが損なわれ、障害が発生します!

これは、logcat 出力のスクリーンショットです。 ここに画像の説明を入力

NULL を 2 つまたは 3 つ追加してみましたが、何も変わりませんでした。

誰かがそれが何であるかを知っていますか?どうすればそれを取り除くことができますか?

4

2 に答える 2

1

その理由は、strncpy が宛先文字列を NULL で終了しないため、コードは次のようになります。

strncpy(alloc, src+start, len);
alloc[len]='\0' ;

これで問題が解決するはずです。

于 2013-11-09T13:57:41.813 に答える