Ho una funzione che restituisce una stringa:C: ritorno stringa dalla funzione
const *char getMyPassword()
{
return "mysecretpassword";
}
Beh, ha funzionato perfettamente, ma ho scoperto che se vorrei correre "stringhe" su sistemi Unix si presenta in lista .. non va bene.
Qual è il modo più semplice per sostituirlo? La funzione si trova in una libreria e voglio mantenerla flessibile. Ora ho iniziato a fare il malloppo all'interno della funzione e la stringa nelle stringhe è scomparsa. Tuttavia, quando lo libererei di nuovo?
char * getMyPassword()
{
unsigned char arr[] = { 'p', 'a', 's', 's', 'w', 'o', 'r' , 'd', '\0' };
char *return_arr = malloc(sizeof(arr));
strcpy(return_arr, arr);
return return_arr;
}
Se ero a malloc prima e passare un puntatore, allora come potevo sapere la taglia prima di come la dimensione delle password è nota solo all'interno della funzione?
Come piano B potrei passare un array enorme, ma non sembra molto elegante. Come dovrei avvicinarmi a questo?
MODIFICA: ho aggiunto lo strcpy (return_arr, arr). In realtà l'avevo nel codice originale, ma l'ho dimenticato qui.
Inseritelo all'indietro, quindi usate '' 'strrev()' ''. Oppure, rot-13 it due volte. –
Se si stanno utilizzando password, si consiglia vivamente di utilizzare password con hash anziché la stringa letterale. Ciò ridurrà sicuramente la quantità di informazioni che possono essere ottenute da qualcuno eseguendo "stringhe" sul programma. È possibile personalizzare una funzione di hash in modo che le persone non possano (o perlomeno sia molto più difficile) determinare quale sia effettivamente il valore. – dbeer
Per quale scopo deve essere utilizzata la password?Un accesso da qualche parte o simile? –