文字列または文字配列を関数に渡してスワップしていますが、何らかの理由で最初の文字配列の値が失われています。これが私のコードです:
void foo(char* a, char* b){
char* temp;
temp = new char[strlen(a)+1];
strcpy(temp, a);
strcpy(a, b);
strcpy(b, temp);
delete[] temp;
}
したがって、foo では、関数に 2 つのポインターが渡され、それらがスワップされます。主な機能はこちら。変数の受け渡しに問題がある可能性がありますが、コンパイラでは問題が発生しませんでした。
int main(){
char a[] = "First";
char b[] = "Last";
std::cout << "A Before: "<< a << "\n";
std::cout << "B Before: " << b << "\n\n";
foo(a, b);
std::cout << "A After: "<< a << "\n";
std::cout << "B After: "<< b << "\n\n";
return 0;
}
私が得ている出力は次のとおりです。
A Before: first
B Before: last
A After:
B After: first
これで、strcpy の実行中に関数内で文字列の値をテストし、最後の strcpy の後に空になります。これは、問題が元の変数へのポインタ内にあることを意味します。すべてのポインターが「a」を指し、プログラムを混乱させる連鎖反応のようなものである可能性があります。
また、これが起こっている理由も非常に役立つでしょう。