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

Posted

技术标签:

【中文标题】如何将函数中使用的数组传递给动态分配的main数组?【英文标题】:how to pass array used in function to the dynamically allocated array of main? 【发布时间】:2017-03-29 13:33:22 【问题描述】:
#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);

//这里在main中使用数组p遇到了一些麻烦,请帮忙

【问题讨论】:

请正确格式化您的代码,并且不要在每一行之后添加额外的空行。而且在使用数组 p 时遇到一些麻烦 并不是问题陈述。 char *p=new char[11]; p=fun(a); - 这是内存泄漏的好方法。您分配了一些内存,然后立即将p 指向别处,没有办法释放该内存。 有问题...已知...什么问题...未知。 你为什么不直接使用std::string delete(ptr); 我没有看到 ptr 在您的代码中声明。至少请添加一些编译代码... 【参考方案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=fun(a); 之后分配了 p


您拨打delete(ptr);,但没有ptr


最后,您还应该#include &lt;string.h&gt; 确保定义了strlen,但在某些平台上它编译时也没有#include &lt;string.h&gt;


你可能想要这个:

#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;

【讨论】:

不应该str[size - 1] = '\0';str[size] = '\0'; 当我尝试编译上面的代码时,我得到了 strlen not declared 错误,我在这里遗漏了什么吗? g++ cc.cpp cc.cpp: In function ‘char* fun(const char*)’: cc.cpp:8:22: error: ‘strlen’ was not declared in this scope int size = strlen(a); ^ cc.cpp: In function ‘int main()’: cc.cpp:24:22: error: ‘strlen’ was not declared in this scope int size = strlen(p); @MichaelWalz 感谢您的帮助。 @LethalProgrammer 不,我在不同的平台上,&lt;string&gt; 可能包括 &lt;string.h&gt;,只需添加 #include &lt;string.h&gt; 就可以了。 @LethalProgrammer 在Visual Studio上编译,试试including &lt;cstring&gt;

以上是关于如何将函数中使用的数组传递给动态分配的main数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在给定位置从动态分配的数组中打印字符串

C++:使用函数为二维数组分配内存时出错

如何将多维动态数组传递给C++中的函数

试图将一个连续的动态二维数组从 C 传递到 Fortran

试图将一个连续的动态二维数组从 C 传递到 Fortran

将数组动态分配到带有指针参数的函数中