我的追加功能不能按预期工作。 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; 
} 
+4

好的,但为什么不使用'运算符+ ='为'std :: string's? – 2013-05-03 15:24:10

+0

重新实现字符串类及其成员是通过C或C++等低级语言学习自己的方式的常用方式。我没有看到指出为了解决问题而存在描述任务的操作员的相关性。 – 2013-05-03 15:40:59

你的追加函数有多个错误,最大的是使用数组作为指针,并使用静态缓冲区来合并字符串。使用静态缓冲区时,所有合并的字符串将位于同一空间中,因此合并两个字符串,然后合并其他两个字符串会覆盖第一个合并的结果!

你可以改变你的功能如下:

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结果。

+0

噢,我修好了我所有的错误。代码现在工作正常。谢谢!!! – 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并忘记所有这些问题。