我的追加功能不能按预期工作。 C++
我正在编写自己的append函数,以便使用静态字符缓冲区[50]在字符串数组1的另一个动态字符数组的末尾附加一个字符串数组2的动态字符数组。但是,编译器会生成以下错误:[错误]将'char'赋值给'char [50]'时不兼容的类型。我试图找出问题所在,但我似乎找不到解决方案。您的帮助将非常感激。我正在使用Dev-C++。代码是波纹管。我的追加功能不能按预期工作。 C++
#include <iostream>
using namespace std;
char *Appendstring(char *a, char *b) // will append b to the end of a
{
static char buffer[50];
char *p=buffer=*a++; //[Error] incompatible types in assignment of 'char' to 'char[50]'
//[Error] invalid conversion from 'char*' to 'char'[-fpermissive]
p--;
while(*p++=b++);
p--; //append
while(*p++=*c++);
return buffer;
}
int main()
{
string str="Displaying: ";
string add=" Summer is coming";
Appendstring(str, add);
return 0;
}
你的追加函数有多个错误,最大的是使用数组作为指针,并使用静态缓冲区来合并字符串。使用静态缓冲区时,所有合并的字符串将位于同一空间中,因此合并两个字符串,然后合并其他两个字符串会覆盖第一个合并的结果!
你可以改变你的功能如下:
char *Appendstring(const char *a, const char *b) // will append b to the end of a
{
char *buffer = new char[strlen(a)+strlen(b)+1];
char *p=buffer;
while(*p++=*a++); // Copy a into buffer
while(*p++=*b++); // Copy b into buffer right after a
*p=0; // Null-terminate the string
return buffer;
}
当然,调用者负责释放现在的Appendstring
结果。
噢,我修好了我所有的错误。代码现在工作正常。谢谢!!! – T4000 2013-05-03 15:56:05
你不能分配到一个数组中,这是你在buffer=*a++
中所做的。你的意思可能是
static char buffer[50];
char *p=buffer;
*p=*a++;
此外,这里
p--;
while(*p++=*b++);
你试图反引用指针一个元素前一个数组的开头 - 这会导致不确定的行为。
此外,你无处检查字符串的长度,所以它可以很容易地更多的49在一起,你的代码将是不正确的和不安全的(容易受到buffer overflow攻击)。
最后一个问题是,由于使用了static
数组,因此您的代码无论如何都不可重入。你可以简单地使用简单的数组,如果你不想调整它到字符串的长度,或者动态分配它,就像这里所建议的那样。
当然最好的解决方案是使用std::string
并忘记所有这些问题。
好的,但为什么不使用'运算符+ ='为'std :: string's? – 2013-05-03 15:24:10
重新实现字符串类及其成员是通过C或C++等低级语言学习自己的方式的常用方式。我没有看到指出为了解决问题而存在描述任务的操作员的相关性。 – 2013-05-03 15:40:59