如何从char *函数返回char *

时间:2019-10-25 13:51:37

标签: c arrays function char

因此,我试图从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;
        }

结果应该是在控制台上打印的创建的密码,但是什么也没有显示。

1 个答案:

答案 0 :(得分:2)

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

此外,本地数组存储在堆栈空间中并一直存在,直到函数返回。要解决此问题,您需要使其static或通过使用malloccalloc函数来分配堆中所需的一些空间。 strdup(..)也是另一种选择。