私は正しく動作するこのような機能を持っています:
char* add(char* origText, char* paste)
{
char* pointerToOrigText = origText;
while (*pointerToOrigText!='\0')
pointerToOrigText++;
while (*paste!='\0')
*pointerToOrigText++=*paste++;
*pointerToOrigText='\0';
}
例:origText = "abc", paste = "def"
関数の後:origText = "abcdef", paste="def"
そこで、2 つの文字列を 1 つにマージしました。しかし、この関数を使用すると:
char* add (char* origText, char *paste)
{
int newLength = strlen(origText) + strlen(paste)+ 1; // + '\0'
char* newText = new char[newLength]; // we want to make sure that 2 strings will fit.
char* pointerToNewText = newText; // pointer to char array where we will merge strings
char* helpPointer = origText; // helps us count until '\0'
while (*helpPointer!='\0')
{
*pointerToNewText=*helpPointer;
*pointerToNewText++; *helpPointer++;
}
while (*paste!='\0')
{
*pointerToNewText=*paste;
*pointerToNewText++; *paste++;
}
*pointerToNewText='\0';
origText = newText;
// cout <<origText<<endl;
}
外部関数の出力は次のとおりです。
- origText = "abc"、paste = "def"
- 関数の後: origText = "abc", paste = "def"
私の本では、それは次の行によるものだと説明しています。
char* newText = new char[newLength];
しかし、私はそれを取得しません。関数にメモリを割り当てるとポインタorigTextに影響するのはなぜですか?