#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遇到麻烦请帮助。
答案 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;
}