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

时间:2017-03-29 13:33:22

标签: c++ arrays pointers dynamic-memory-allocation

#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]='\0';

        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遇到麻烦请帮助。

1 个答案:

答案 0 :(得分:1)

有很多问题:

此处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]='\0';

应该是:

str[size] = '\0';

否则你的结果字符串将错过最后一个字符。

主要:

char *p=new char[11];

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

您致电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] = '\0';
  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;
}