0

割り当てる必要がありますt2が、正確な方法がわかりません。

char *reverse(char *t)
{
    int length= strlen(t);
    char *t2 = (char *) malloc(length * sizeof(char*));
    for(int i= (length-1);i>=0;i--)
       t2[i]=t[length-1];
    return t2;
}

何か助けてください?

4

3 に答える 3

3

あなたは近くにいます。

char *t2 = malloc(length + 1); // reserve space for a null terminator

ただし、おそらくそのループをでlengthはなくlength - 1、で開始する必要があります。ループ内の割り当ても間違っています(ソースではなく、宛先の場所のみを変更します)。文字列を返す前に、必ずnullで終了してください。

エディトリアルノート:

  1. malloc()Cプログラムでの戻り値をキャストする必要はありません。
  2. sizeof(char)1-乗算する必要はありません。
  3. 探しているセマンティクスによっては、まったく必要ない場合がありますmalloc()。文字列の反転は、Cでインプレースで実行できます。
于 2013-03-05T19:34:51.490 に答える
2

コードに複数のエラーがあります。

前に述べたようにsizeof(char) != sizeof(char*)、前者は文字のサイズであり、2番目はポインタのサイズです。

また、ループはt2のすべてのインデックスに同じ値のみを割り当てます t2[i]=t[length-1];

const char*さらに、 const char *文字列も渡すことができるように、引数として取る必要があります。

文字列の最後にヌル文字\0は設定されていません。

このコードはそれを行う必要があります:

char* reverse(const char *t)
{
    int length= strlen(t);
    char* t2 = (char*)malloc((length+1) * sizeof(char));
    for(int i=0;i<length;i++)
    {
      t2[(length-1)-i]=t[i];
    }
    t2[length] = '\0';
    return t2;
}
于 2013-03-05T19:57:33.227 に答える
0
char *t2 = malloc(length*sizeof(char) + 1);

char型へのポインタとゼロ終了の場合は1をmallocします。

于 2013-03-05T19:36:04.470 に答える