1

静的文字バッファーを使用して、文字列 array1 の別の動的文字配列の末尾に文字列 array2 の動的文字配列を追加する独自の追加関数を作成しています [50]。しかし、コンパイラは次のエラーを生成します。問題を理解しようとしましたが、解決策が見つからないようです。あなたの助けは非常に高く評価されます。Dev-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

2 に答える 2

1

で行うように、配列に代入することはできませんbuffer=*a++。あなたが意味したのはおそらく

static char buffer[50];
char *p=buffer;
*p=*a++;

さらに、こちら

p--;
while(*p++=*b++);

配列の先頭の 1 要素前でポインタを逆参照しようとしています- これは未定義の動作につながります。

さらに、文字列の長さをチェックする場所がないため、簡単に 49 を超える可能性があり、コードは正しくなく、安全ではありません (バッファー オーバーフロー攻撃の犠牲になりやすい)。

最後の 1 つの問題は、static配列を使用しているため、コードが再入可能でないことです。ここで提案されているように、文字列の長さに合わせて調整したくない場合、または動的に割り当てたくない場合は、単純な配列を使用できます。

もちろん、最善の解決策は、std::stringこれらの問題をすべて使用して忘れることです。

于 2013-05-03T15:26:46.927 に答える