如何将函数中使用的数组传递给动态分配的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 <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;
【讨论】:
不应该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 不,我在不同的平台上,<string>
可能包括 <string.h>
,只需添加 #include <string.h>
就可以了。
@LethalProgrammer 在Visual Studio上编译,试试including <cstring>
以上是关于如何将函数中使用的数组传递给动态分配的main数组?的主要内容,如果未能解决你的问题,请参考以下文章