如何将函数中使用的数组传递给main的动态分配数组?

how to pass array used in function to the dynamically allocated array of main?

#include<iostream>

#include<string>    
using namespace std;

char *fun(const char* a)
{
        int size=strlen(a);

        char* str=new char[12];

        for(int i=0;i<size-1;i++)
        {
                str[i]=a[size-i-1];
        }

        str[size-1]='[=10=]';

        return str;
}

main()
{
        int i=0;

        char a[11]={'a','y','u','s','h','r','i','k','h','r','a'};

        char *p=new char[11];

        p=fun(a);

        for(int i=0;i<11;i++)
        {
                cout<<p[i]<<" ";
        }

        delete(ptr);
}

//在此处主要使用数组 p 时遇到一些问题请帮忙。

有很多问题:


此处 a 数组不是 NUL 终止的,因此 strlen 不能在 fun 中使用:

char a[11]={'a','y','u','s','h','r','i','k','h','r','a'};

此处您分配的是固定大小 12,但您需要根据字符串的长度分配一个动态大小:

char* str=new char[12];

然后:

str[size-1]='[=12=]';

应该是:

str[size] = '[=13=]';

否则您得到的字符串将丢失最后一个字符。


主要内容:

char *p=new char[11];

毫无意义,因为您在 p=fun(a); 之后立即分配 p


你调用了delete(ptr);,但是没有ptr


最后,您还应该 #include <string.h> 确保 strlen 已定义,但在某些平台上编译时也没有 #include <string.h>


你可能想要这个:

#include <iostream>
#include <string>
#include <string.h>

using namespace std;

char *fun(const char* a)
{
  int size = strlen(a);
  char* str = new char[size + 1];

  for (int i = 0; i < size; i++)
  {
    str[i] = a[size - i - 1];
  }

  str[size] = '[=15=]';
  return str;
}

int main()
{
  char a[] = "ABCDE";    
  char *p = fun(a);    
  int size = strlen(p);

  for (int i = 0; i < size; i++)
  {
    cout << p[i] << " ";
  }

  delete[] p;
}