1

NULL バイトを含む文字ポインターがある場合、長さを見つけるために使用できる組み込み関数はありますか、それとも独自の関数を作成する必要がありますか? ところで、私はgccを使用しています。

編集:

文字ポインターが malloc() を使用して作成されたことに言及する必要があります。

4

3 に答える 3

8

ポインターがある場合、サイズを知る唯一の方法は、サイズを個別に保存するか、文字列を終了する一意の値を持つことです。(通常'\0') これらのどちらも持っていない場合は、単に実行できません。

EDIT : を使用してバッファを割り当てたことを指定したのでmalloc、答えは上の段落です。割り当てた金額を覚えておくかmalloc、単に終了値を持っている必要があります。

たまたま配列(: などchar s[] = "hello\0world";) がある場合は、に頼ることができますsizeof(s)。ただし、ポインターで試してみると、配列のサイズではなく、ポインターのサイズが得られることに注意してください。(ただし、最初の までカウントされるため、strlen(s)等しくなります)。5'\0'

さらに、配列は関数に渡されるとポインターに分解されます。したがって、配列を関数に渡すと、振り出しに戻ります。

ノート:

void f(int *p) {}

void f(int p[]) {}

void f(int p[10]) {}

はすべて同じです。3 つのバージョンすべてで、pは配列ではなくポインタです。

于 2012-06-13T23:41:54.883 に答える
1

文字列の一部に NULL バイトが含まれている場合、文字列がどこで終わっているかをどのように知ることができますか? 確かに、そのような文字列を扱う組み込み関数はありません。最初の null バイトを文字列の末尾として解釈します。

長さが必要な場合は、自分で保管する必要があります。このような文字列では、標準ライブラリの文字列関数が正しく機能しないことに注意してください。

于 2012-06-13T23:41:45.460 に答える
1

長さは自分で把握する必要があります。

C 文字列はnull で終了します。つまり、最初の null 文字が文字列の終わりを示します。すべての組み込み文字列関数はこれに依存しているため、データの一部として NULL を含むことができるバッファーがある場合、それらを使用することはできません。

を使用しているmallocため、割り当てられたバッファーのサイズと、そのバッファー内の有効なデータを構成する文字数の 2 つのサイズを追跡する必要がある場合があります。

于 2012-06-13T23:42:06.893 に答える