1

からの入力として char 配列を受け取る関数を作成していますmain()。この関数は、char へのポインターを返します。次の 3 つの問題があります。

  1. すべてがうまくいけば、この関数は渡された配列の部分配列へのポインタを返すはずです。このmain()サブ配列にアクセスできるようにする必要があるためmalloc、関数で使用してこのグローバル サブ配列を作成できます。
  2. に空の char 配列を渡す関数が必要{}ですmain()
  3. エラー チェックを行うには、NULLポインターを渡す必要があります。2番目の問題についてのみ質問があります。{}空の文字配列へのポインターをに渡すにはどうすればよいmain()ですか?

mallocここで役立つかどうかはわかりません。

**EDIT**:

わかりました、私はいくつかの混乱を引き起こしたと思います。正確な問題を特定させてください。という形の関数を書いていますchar * test(char * a, int start, int end, int len)。これへの典型的な入力は、配列のような配列{'a', 'b', 'c'}になりますstart = 0, end = 3, len = 3. lenこれは入力配列の長さです。start開始位置です。この例では、その0が配列の先頭です。現在、end値は、値から開始し、startendから要素を取得しないことを示していstartます。この例では、 から始まり、'a'そこから 、 、 、 の 3 つの要素を取る'a'こと'b'を意味し'c'ます。そして、そのような選択で新しい配列を形成します。ここで元の配列を取得します。それでは、みましょうa[] = {'a', 'b', 'c'}。次にtest(a , 0 , 3 , 3)、へのポインターを返します {'a', 'b', 'c'}. 同様に、test(a , 0 , 2 , 3)は へのポインタを返し{'a', 'b'}、は へのポインタtest(a , 1 , 2 , 3)を返します{'b', 'c'}。今、私は関数がNULLポインタを返すようにしたい if (start < 0) || (end < 0) || (0 == len) || (start+ end > len). NULLしたがって、次の状況では、関数はポインター を返します。test(a , 0 , 4 , 3) test(a , 1 , 3 , 3) test(a , 2 , 2 , 3) test(a , 3 , 1 , 3) test(a , -1 , 2 , 3) test(a , -1 , -2 , 3)

もしそうならa[] = {}test(a , 0 , 1 , 3)を返す必要がありNULLます。私はこれを理解しました。end値がの場合0、空の配列へのポインターを返すように機能したいと思います{}。関数は元の配列を変更してはなりません。

EDIT NO 2:

http://admin.cs.mum.edu/Pretest/sampletest.htmからサンプル問題 3 を実行しています。それが役立つことを願っています...

4

1 に答える 1

1

関数内に入力されるアドレスと長さへのポインターを含む構造体を返すことができます。

struct ret_me
{
    char *p;
    int len;
}

.....

main()
{
    .......
    struct ret_me xxx;
    xxx=your_fun(...);
    if(xxx.len == 0)
    ...array is empty...
    ..........

}
于 2013-02-05T13:05:15.387 に答える