我试图从一个函数中返回一个char *,该函数通过获取给它的两个字符串的一部分来形成一个字符串。该字符串必须以char *的形式返回。但是,当我运行以下代码时,不会打印输出。请帮忙解决这个问题。
#include <iostream>
#include<string.h>
using namespace std;
char *findpass(char *s1, char*s2)
{
int sl1 = strlen(s1);
int sl2 = strlen(s2);
int i = 0, in = 0;
char temp[100];
char *t;
if (sl1 % 3 == 0)
{
for (i = 0; i<sl1 / 3; i++)
{
temp[in] = *(s1 + i);
in++;
}
}
t = temp;
return t;
}
int main()
{
char i1[10], i2[10];
char *f1, *f2;
cin >> i1 >> i2;
f1 = i1;
f2 = i2;
char *f = findpass(f1, f2);
cout << f;
return 0;
}
答案 0 :(得分:2)
你的char temp[100];
是局部变量,它会在离开范围后被销毁,因此t = temp;
将指向一个混乱的数据。
您需要为char *temp = new char[100];
分配内存然后在临时t = temp;
上指向t。你也可以return temp;
。但之后不要忘记通过delete []
解除分配的内存。看看这个例子:
char *findpass(char *s1,char*s2)
{
int sl1=strlen(s1);
int sl2=strlen(s2);
int i=0,in=0;
char *temp = new char[100];
char *t;
if(sl1%3==0)
{
for(i=0;i<sl1/3;i++)
{
temp[in]=*(s1+i);
in++;
}
}
t=temp;
return t;
}
当用测试输入数据调用时,我们有:
int main()
{
char temps1[] = "123456789";
char temps2[] = "abc";
char* retVal = findpass(temps1, temps2);
std::cout << retVal <<std::endl; // prints 123
//Deallocate allocated memory before
delete [] retVal;
return 0;
}
输出是:
123
答案 1 :(得分:0)
#include <iostream>
#include <cstring>
using namespace std;
char *findpass(char *s1,char*s2)
{
int sl1=strlen(s1);
int sl2=strlen(s2);
int i=0,in=0;
char temp[100];
if(sl1%3==0)
{
for(i=0;i<sl1/3;i++)
{
temp[in]=*(s1+i);
in++;
}
}
cout<<temp<<endl;
char *t= new char [strlen(temp)+1]; // added dynamic memory allocation
strcpy(t,temp); // copy temp to t;
return t;
}
需要使用动态内存分配从函数返回char *;
int main()
{
char i1[10],i2[10];
char *f1,*f2;
cin>>i1;
cin>>i2;
f1=i1;
f2=i2;
char *f = findpass(f1,f2);
cout<<f;
delete []f; // delete dynamic memory allocation to avoid memory leak
return 0;
}