0

2つの引数を持ち、文字列の2つの配列を連結できる関数を作成しました。ただし、5つの引数を連結するには、同じ関数を使用する必要があります。私の関数が正しく機能しないので、それは私が立ち往生しているところです。最後の追加のみを保持します。以下のコードを貼り付けました。あなたの助けをいただければ幸いです。私はC++でコードを記述し、dev-C++を使用しています。

#include<iostream>
#include<conio.h>


using namespace std;


char *Append(char *str, char *add)
{
 int m=5;
 static char buffer[150];  
 char *p=buffer;
 while(*p++=*str++);
 p--;
 while(*p++=*add++);  

 return buffer;  

}

int main()
{
 static char *buffer1;
 char *temp=" "; 
 char *str="Be, ";
 char *add="or not to be, ";
 char *str3="that's the question ";
 char *str4="Whether 'tis Nobler in the mind to suffer ";
 char *str5="The Slings and Arrows of outrageous Fortune,";

 buffer1=Append(str, add);
 cout<<buffer1;
 ///while(*temp++=*buffer1++);//where the problem starts!  
 /// temp--;
 Append(temp, str);    ///i am trying to append all strings into temp!!
 buffer1=Append (temp, add);
 cout<<endl<<buffer1;


 getch();
 return 0;
}
4

2 に答える 2

4

連結された文字列を静的バッファ(static char buffer[150];)に書き込んでいます。append関数を呼び出すたびに、同じバッファーに書き込みます。つまり、appendの前の呼び出しで作成された文字列を上書きします。

 buffer1=Append(str, add); // buffer1 contains "Be, or not to be, "
 Append(temp, str); // buffer1 now contains " Be, " even though you don't assign the result of Append to buffer1

ただし、次の場合でも機能させることができます。

buffer1=Append(str, add);
Append(buffer1, str3);
Append(buffer1, str4);
Append(buffer1, str5);

ただし、バッファをオーバーランしないように注意する必要があります。

これが機能するのは、最初の文字列としてbuffer1を渡すと、append関数の最初のステップが以前に連結された文字列をそれ自体にコピーし、2番目のステップが新しい文字列を追加することになるためです。

于 2012-04-30T13:55:55.150 に答える
1

あなたの質問は私には完全には明確ではありません。それでも、Append()を複数回使用して連続する5つの文字列を連結する場合は、次のようにmain()を使用します。

int main()
 {
 static char *buffer1;
 char *temp=" "; 
 char *str="Be, ";
 char *add="or not to be, ";
 char *str3="that's the question ";
 char *str4="Whether 'tis Nobler in the mind to suffer ";
 char *str5="The Slings and Arrows of outrageous Fortune,";

 buffer1=Append(str, add);
 cout<<buffer1;
 ///while(*temp++=*buffer1++);//where the problem starts!  
 /// temp--;
 buffer1=Append(buffer1, str3);    ///i am trying to append all strings into temp!!
 buffer1=Append(buffer1,str4);
 buffer1=Append(buffer1,str5);
 cout<<endl<<buffer1;


 getch();
return 0;
}
于 2012-04-30T14:16:48.650 に答える