Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从char*函数返回char*_C_Arrays_Function_Char - Fatal编程技术网

如何从char*函数返回char*

如何从char*函数返回char*,c,arrays,function,char,C,Arrays,Function,Char,所以,我试图从char*函数返回一个字符串,但我总是得到这样的警告:函数返回局部变量[-Wreturn local addr]的地址,而字符串不会打印到控制台 昨天我试着打印f(password=createPassword(quantity),但当我今天再次尝试时,它没有打印字符串 这就是功能 char*createPassword(int a){ 字符contadorTotal=0,c1=0,c2=0,c3=0,c4=0,密码[30000]=“”,随机字符,温度[100000]; int随机

所以,我试图从char*函数返回一个字符串,但我总是得到这样的警告:函数返回局部变量[-Wreturn local addr]的地址,而字符串不会打印到控制台

昨天我试着打印f(password=createPassword(quantity),但当我今天再次尝试时,它没有打印字符串

这就是功能

char*createPassword(int a){
字符contadorTotal=0,c1=0,c2=0,c3=0,c4=0,密码[30000]=“”,随机字符,温度[100000];
int随机;
srand((无符号)时间(NULL));
而(a>0)
{
做
{
随机=(rand()%(5-1))+1;
如果(随机==1){
如果(c1<4){
randomChar=(33+rand()%(48-33));
sprintf(温度,“%c”,随机字符);
strcat(密码、温度);
c1++;
contadorTotal++;
}
}else if(随机==2){
如果(c2<3){
randomChar=rand()%26+97;
sprintf(温度,“%c”,随机字符);
strcat(密码、温度);
c2++;
contadorTotal++;
}
}否则如果(随机==3){
如果(c3<3){
randomChar=(65+rand()%(91-65));
sprintf(温度,“%c”,随机字符);
strcat(密码、温度);
c3++;
contadorTotal++;
}
}else if(随机==4){
如果(c4<3){
randomChar=(48+rand()%(58-48));
sprintf(温度,“%c”,随机字符);
strcat(密码、温度);
c4++;
contadorTotal++;
}
}
}而(总数<13);
a——;
c1=0;
c2=0;
c3=0;
c4=0;
contadorTotal=0;
strcat(密码“\n”);
}   
返回密码;
}
这就是我试图打印结果的地方


案例“c”:
整数;
字符*密码;
printf(“插入要创建的密码数:”);
扫描频率(“%d”和数量);
printf(“-------------------------\n”);
密码=创建密码(数量);
printf(密码);
打破
}

结果应该是在控制台上打印创建的密码,但它没有显示任何内容。

首先,数组不是指针!但是,数组可以衰减为指针


此外,本地数组存储在堆栈空间中,直到函数返回为止。要解决此问题,您需要将其设置为
静态
,或者使用
malloc
calloc
函数在堆中分配所需的一些空间。
strdup(…)
也是另一种选择。

首先,数组不是指针!但是,数组可以衰减为指针


此外,您的本地数组存储在堆栈空间中,直到函数返回为止。要解决此问题,您需要将其设置为
静态
,或者使用
malloc
calloc
函数在堆中分配所需的一些空间。
strdup(…)
也是另一种选择。

return strdup(密码);
在函数的末尾,并且
免费(密码);
在完成后在调用者中。简单的修复:
静态字符密码[30000];
(但是你真的需要这么大的数组吗?)请尝试重写您的函数,以便它接收一个指针,将密码存储在何处,而不是将密码存储在它自己的本地数组中。
int createPassword(int a,char*destination){/*您的代码使用destination来存储密码*/}
并这样调用它:
char password[100];int quantity;…if(quantity<100)createPassword(quantity,password);
我使用了mch解决方案,效果很好,非常感谢大家!我可能需要学习一些C课程才能学得更好!
在函数结束时返回strdup(password);
在使用完后返回调用方的
免费(password);
。简单修复:
静态字符密码[30000];
(但你真的需要这么大的数组吗?)尝试重写你的函数,使它接收到一个指针,指向存储密码的位置,而不是将密码存储在它自己的本地数组中。
int createPassword(int a,char*destination){/*你的代码使用destination来存储密码*/}
并这样称呼它:
char password[100];int quantity;…if(quantity<100)createPassword(quantity,password)
我使用了mch解决方案,效果很好,非常感谢大家!我可能需要学习一些C课程才能学得更好!…或者采取另一种方法,在函数大小的同时提供一个缓冲区,函数只需填充缓冲区,而不返回指针。@Jabberwocky是的,这可以是另一种方法,这是uses堆栈空间,tooNo堆栈空间用于此方法(!?)@Jabberwocky嗯,可能在调用者中……或者采取另一种方法,向函数提供一个缓冲区以及它的大小,函数将只填充缓冲区而不是返回指针。@Jabberwocky是的,它可以是另一种方法,使用堆栈空间,tooNo堆栈空间与此方法一起使用(!?)@Jabberwocky好吧,也许是来电者。