このコードセグメントを理解できません。私は私が知っていると思うことは、私が通過する時ということで"abc"
、その後x
の文字列の最初の要素へのポインタになり、これは正しいでしょうか?そして、なぜそれは私に無限ループを与えるのですか?
これが私のコードです:
void foo1(char* x)
{
if (!x)
return;
printf("%c ",*x);
foo1(++x);
}
int main()
{
foo1("abc");
return 0;
}
ポインタがnull
。になると、反復を停止します。実際に必要なのは、\0
文字(つまり、文字列の終わり)に到達したときに反復を停止することです。
int main()
{
foo1("abc");
return 0;
}
void foo1(char* x)
{
if (*x == 0)
return;
printf("%c ",*x);
foo1(++x);
}
ポイントされたアイテムではなく、ポインタ値を反復処理しているため、基本的には、文字列の場所から開始して、プロセスのアドレス空間を反復処理し始めます。セグメンテーション違反の原因となる無効なアドレスに到達する前に、スタックスペースが不足する可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加