main関数で関数のサイズを使用すると正しく動作します。しかし、私は逆関数でそれを使用するときにのみ8を返します。なぜか、私は間違ってそれを使用しましたか?(これは、逆関数に渡された文字列を逆にする必要がある代入の始まりです。 string.hライブラリを使用することはできません。これを達成する別の方法があれば教えてください。sizeof関数を使用してサイズを取得し、配列をループし、一時変数を使用して逆向きにすることを計画していましたポインタとしてxを渡すとC sizeof((x))が機能しません
#include <stdio.h>
char reverse(char *x);
int main(int argc, char* argv[])
{
char word[] = "Apple pies";
printf("%s\n", word);
reverse(word);
printf("%s\n", word);
printf("%s\n", reverse(word));
printf("%s\n", word);
return 0;
}
char reverse(char *x)
{
char crud;
int lc =0;
size_t length = 0;
char *tmp = x;
while (*tmp++)
++length;
while (length > lc)
{
crud = x[length];
x[length] = x[lc];
x[lc] =crud;
length--;
lc++;
}
}
'reverse'では' x'は単なるポインタ(つまり 'char *')です。 'main'では、' x'は配列です( 'char [11]')。その 'sizeof'トリックは、ポインタではなく配列に対してのみ機能します。この長さをパラメータとして 'reverse'に渡す必要があります(または' strlen'を使います)。 – Cornstalks
strlenはライブラリにあると仮定しますか?私は逆に渡された文字列を逆にする必要がありますが、(char * x)のパラメータを渡すだけで、string.hライブラリは使用できません。 –
John
この場合、独自のバージョンの 'strlen'を書く必要があります。それは簡単です。例えば'size_t length = 0; while(* x ++)++ length; ' – Cornstalks