如何将函数中使用的数组传递给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;
}
#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;
}