使用指针修改动态字符数组

Mik*_*ler 1 c++ pointers c-strings dynamic-arrays

我正在尝试使用指针连接两个动态c数组(包含字符串).我在网上搜索了一堆使用strcat的东西,但我需要学习如何使用指针来做这件事.我还不清楚动态c阵列到底是什么,我只知道我必须使用"new".这是我目前无法编译的代码:

#include <iostream>
using namespace std;
#define MAX_CHAR 50


void append(char*, char*);

int main()
{
    char *str1 = new char[MAX_CHAR];
    char *add1 = new char[MAX_CHAR];
    str1 = "This string";
    add1 = " add this one";

    append(str1, add1);

    cout << str1;

    delete [] add1;
    delete [] str1;

    return 0;
}

void append(char *str, char *add)
{
   while(*str != '\0')
      str++;

   while(*add != '\0')
   {
      *str = *add;
      add++;
      str++;
   }
   *str = '\0';
}
Run Code Online (Sandbox Code Playgroud)

Ruf*_*ind 6

这部分不符合你的想法:

str1 = "This string";
add1 = " add this one";
Run Code Online (Sandbox Code Playgroud)

您正在尝试将字符串文字("This string")分配给字符串指针(str1).这不起作用,因为:

  1. 你基本上扔掉了你之前用new一行分配的指针
  2. 在运行时不能修改字符串文字(文字属于类型const char [],因此您应该期望编译器错误/警告).

因此,您需要手动将字符串文字复制到char数组中.您可以使用标准库函数strcpy(这需要<cstring>):

std::strcpy(str1, "This string");
std::strcpy(add1, " add this one");
Run Code Online (Sandbox Code Playgroud)