因此,我试图从char *函数返回一个字符串,但我总是收到此警告:函数返回局部变量[-Wreturn-local-addr]的地址,并且该字符串不会打印到控制台
昨天我尝试打印f(password = createPassword(quantity),并且可以,但是当我今天再次尝试时,它不打印字符串。
这是功能
char* createPassword(int a){
char contadorTotal = 0, c1 = 0, c2 = 0, c3 = 0, c4 = 0,password[30000] = "", randomChar, temp[100000];
int random;
srand((unsigned)time(NULL));
while (a > 0)
{
do
{
random = (rand()%(5-1)) + 1;
if(random == 1){
if(c1 < 4){
randomChar = (33 + rand() % (48-33));
sprintf(temp, "%c", randomChar);
strcat(password, temp);
c1++;
contadorTotal++;
}
}else if(random == 2){
if(c2 < 3){
randomChar = rand() % 26 + 97;
sprintf(temp, "%c", randomChar);
strcat(password, temp);
c2++;
contadorTotal++;
}
}else if( random == 3){
if(c3 < 3){
randomChar = (65 + rand() % (91-65));
sprintf(temp, "%c", randomChar);
strcat(password, temp);
c3++;
contadorTotal++;
}
}else if(random == 4){
if(c4 < 3){
randomChar = (48 + rand() % (58-48));
sprintf(temp, "%c", randomChar);
strcat(password, temp);
c4++;
contadorTotal++;
}
}
}while (contadorTotal < 13);
a--;
c1 = 0;
c2 = 0;
c3 = 0;
c4 = 0;
contadorTotal = 0;
strcat(password, "\n");
}
return password;
}
这就是我要打印结果的地方
case 'c':
int quantity;
char* password;
printf("Insert how many passwords you want to create: ");
scanf("%d", &quantity);
printf("----------------------\n");
password = createPassword(quantity);
printf(password);
break;
}
结果应该是在控制台上打印的创建的密码,但是什么也没有显示。
答案 0 :(得分:2)
首先,数组不是指针!但是,数组可以衰减为指针。
此外,本地数组存储在堆栈空间中并一直存在,直到函数返回。要解决此问题,您需要使其static
或通过使用malloc
或calloc
函数来分配堆中所需的一些空间。 strdup(..)
也是另一种选择。