PROBLEMA Problema con la classe vector C++

orsetto_

Nuovo Utente
12
1
Buonasera, ho scrittu una funzione che registra in un vettore di char* tutti i nomi delle cartelle presenti in una directory.
Finché stampo il nome delle cartelle tutto okay, ma quando cerco di registrarle nel vettore, l'intero vettore viene sostituito dal nome dell'ultimo elemento, in ordine alfabetico, nella directory (indifferentemente se sia una cartella o un file).
La funzione è questa:
C++:
vector<char*> fListaDir(char *CurrentDir) {
    vector<char*> s;
    
    DIR *pDir = NULL;
    struct dirent *pD;
    pDir = opendir(CurrentDir);
    
    pD = readdir(pDir);
    do {
        DIR *pTMPDir = opendir(pD->d_name);
        if(pTMPDir!=NULL) s.push_back(pD->d_name);
        
        pD = readdir(pDir);
    } while (pD!=NULL);
    
    return s;
}

Ho anche provato a sostituire la funzione push_back con altre dalla classe vector ma senza risultati
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Semplicemente usa std::filesystem.
E quindi std::string invece di char*
 

orsetto_

Nuovo Utente
12
1
Ah... pensavo fosse la stessa cosa:cav:
Usavo char* perché era comodo per altre funzioni che sto usando nel programma, ma a questo punto
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Ah... pensavo fosse la stessa cosa:cav:
Usavo char* perché era comodo per altre funzioni che sto usando nel programma, ma a questo punto
Se usi roba della STL e di Boost sei apposto. Se stai usando la Win32 API hai sempre std::string::c_str().

Più che altro con std::filesystem quel che vuoi fare lo fai con 4 linee di codice contate.
 

orsetto_

Nuovo Utente
12
1
Se usi roba della STL e di Boost sei apposto. Se stai usando la Win32 API hai sempre std::string::c_str().

Più che altro con std::filesystem quel che vuoi fare lo fai con 4 linee di codice contate.
In effetti ora tutto il resto l'ho risolto con std::string::c_str()

Riguardo a std::filesystem, non lo conoscevo, ma ora me lo andrò a vedere

Grazie!

Inviato da SM-G925F tramite App ufficiale di Tom\'s Hardware Italia Forum
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!