割り当てる必要があります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;
}
何か助けてください?
あなたは近くにいます。
char *t2 = malloc(length + 1); // reserve space for a null terminator
ただし、おそらくそのループをでlength
はなくlength - 1
、で開始する必要があります。ループ内の割り当ても間違っています(ソースではなく、宛先の場所のみを変更します)。文字列を返す前に、必ずnullで終了してください。
エディトリアルノート:
malloc()
Cプログラムでの戻り値をキャストする必要はありません。sizeof(char)
は1
-乗算する必要はありません。malloc()
。文字列の反転は、Cでインプレースで実行できます。コードに複数のエラーがあります。
前に述べたように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;
}
char *t2 = malloc(length*sizeof(char) + 1);
char型へのポインタとゼロ終了の場合は1をmallocします。