0

我编写了一个有两个参数的函数,因此可以连接 2 个字符串数组。但是,我需要使用相同的函数来连接五个参数。这就是我卡住的地方,因为我的功能无法正常工作。我只保留最后一个追加。我粘贴了下面的代码。您的帮助将不胜感激。我用 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 函数的第一步是将先前连接的字符串复制到自身中,第二步是添加新字符串。

于 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 回答