【问题标题】:How to initialize a char* without first defining it's size如何在不先定义其大小的情况下初始化 char*
【发布时间】:2013-12-02 13:16:10
【问题描述】:

马上,我需要使用动态分配的字符数组来进行分配,所以不要建议我只使用字符串。我需要创建一个接受字符数组作为参数的方法,并使用 strcpy 将该字符插入到 char* 中。如何在不初始化 char* 的情况下执行此操作?

到目前为止,这是我的代码:

char* char_array;
char test_array[] = {'t','e','s','t','\0'};
strcpy(char_array, test_array);

【问题讨论】:

  • 需要通过new为char_array分配内存。

标签: c++ dynamic char strcpy


【解决方案1】:

您的 char_array 只是一个未初始化的指针。你需要为它动态分配内存,然后执行strcpy。

char* char_array = new char[6];
char test_array[] = {'t','e','s','t','\0'};
strcpy(char_array, test_array);

或者按照 Joachim 的建议,您可以使用 strdup() 复制字符串 - 它会分配内存并将字符串复制到其中。

在这两种情况下,完成后不要忘记释放()(或删除[])生成的内存

【讨论】:

    【解决方案2】:

    除非你实际上为char_arraymallocnew 分配了一块内存,否则你不能这样做。

    int length = 6;
    char* char_array = (char*) malloc(sizeof(char) * length);
    

    char* char_array = new char[6];
    

    【讨论】:

      【解决方案3】:
      char * char_array = NULL;
      void yourFunc(char your_array[]) {
          if (NULL != char_array) {
              free(char_array);
              char_array = NULL;
          }
          char_array = (char *)malloc(sizeof(char) * strlen(your_array));
          strcpy(char_array, your_array);
      }
      

      【讨论】:

      • sizeof(your_array) 是指针的大小,而不是原始数组长度。如果您假设该数组是一个以空字符结尾的字符串,那么 strlen 将起作用。在strcpy 调用中,您还有test_array 而不是your_array
      【解决方案4】:

      您说过您需要一个接受 char[]/char *
      的方法/函数 你已经陈述了你的限制...
      对于教学目的,这似乎确实是低水平
      我假设空终止字符数组和有效的源字符数组

      //function accepts character array
      char * charseqduplicate(char * s)
      {
          //low level c
          const int len = strlen(s) + 1;;
          char * copy = new char[len];
          strcpy(copy, s);
          //remember to delete or use something like unique_ptr
          return copy;
      
      }
      
      void letsdothis()
      {
          //low level c
          char test[] = {'y','e','s',char(0)};
          char * dup = charseqduplicate(test);
          cout << dup;
          delete [] dup;
      
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-30
        • 2011-05-30
        • 1970-01-01
        • 2011-09-14
        • 2022-10-17
        • 1970-01-01
        • 2013-01-23
        • 1970-01-01
        • 2023-03-25
        相关资源
        最近更新 更多