Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    31

    [C/C++] Conversione da char* a char[]

    Ciao ragazzi! Scusate la banalità della domanda, ma non riesco proprio a convertire un valore char* in un char[]...

    Esempio:
    codice:
            string num1 = "1234567891";
            char str[] = (char*)num1.c_str();
    Non riesco ad eseguire la conversione!

    Grazie a tutti in anticipo! Ciao!
    Ciamiz

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280

    Re: [C/C++] Conversione da char* a char[]

    Originariamente inviato da Ciamiz
    Ciao ragazzi! Scusate la banalità della domanda, ma non riesco proprio a convertire un valore char* in un char[]...

    Esempio:
    codice:
            string num1 = "1234567891";
            char str[] = (char*)num1.c_str();
    Non riesco ad eseguire la conversione!
    Perché non puoi! Un array è allocato ad un indirizzo che non puoi cambiare. Per dirla in altri termini: una volta che hai definito ad esempio una variabile int pippo[]; l'indirizzo di pippo non è modificabile, perché non è un puntatore.

    Semmai nel tuo caso puoi fare:
    char *str = (char*) num1.c_str();

    Il cast è necessario perché c_str() ritorna un "const char*"
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    31
    Quindi se dovessi mettere in un banalissimo array di char il contenuto di un oggetto string?

    Anche se allocassi dinamicamente l'array otterrei un puntatore...

    Aiuto!

    Ciamiz!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    a quel punto potresti copiare il contenuto con strcpy

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Originariamente inviato da Ciamiz
    Quindi se dovessi mettere in un banalissimo array di char il contenuto di un oggetto string?

    Anche se allocassi dinamicamente l'array otterrei un puntatore...
    Scusa ma se dici questo ... deduco che non hai capito le somiglianze e le differenze tra array e puntatori.

    In C esiste una relazione molto forte tra array e puntatori. Una operazione di accesso all'elemento di un array tramite un indice, è realizzabile anche con un puntatore.

    char a[10];

    l'espressione a[i] è esattamente equivalente alla espressione *(a+i), ed anzi, è proprio quest'ultima che viene usata nel codice generato dal compilatore!
    E nota inoltre che (a+i) è appunto un puntatore, dereferenziato poi con il * per accedere al valore puntato.

    char a[5] = { 'c', 'i', 'a', 'o', '\0' };

    le espressioni a[2] e *(a+2) fanno riferimento entrambe al carattere 'a'.

    Ora vediamo con i puntatori:

    char *b = "ciao";

    le espressioni b[2] e *(b+2) fanno entrambe riferimento (guarda caso ) al carattere 'a'.

    Quindi quale è il tuo problema? Appunto ... non è un problema.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    31
    Grazie mille a tutti innanzi tutto!

    Il mio problema è che devo utilizzare poi quell'array in una parte di codice scritta in assembler, quindi se uso una variabile char[] riesco ad accedere all'elemento con il solo nome della variabile ed eventualmente poi spostandomi con un esi o un altro registro, mentre non riesco ad utilizzare lo stesso vettore se questo è un char*!

    Magari non indirizzo correttamente non so!

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Originariamente inviato da Ciamiz
    Il mio problema è che devo utilizzare poi quell'array in una parte di codice scritta in assembler, quindi se uso una variabile char[] riesco ad accedere all'elemento con il solo nome della variabile ed eventualmente poi spostandomi con un esi o un altro registro, mentre non riesco ad utilizzare lo stesso vettore se questo è un char*!
    Non so quanto possa esserti utile ma il seguente codice è corretto:

    codice:
    int main (void)
    {
        char a[5] = { 'c', 'i', 'a', 'o', '\0' };
        char *b = "ciao";
        
        __asm
        {
            mov al, [a+2]       // al = 'a'
    
            mov esi, b
            mov al, [esi+2]     // al = 'a'
        }
    
        return 0;
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    31
    Grazie 2 mila! Ora finalmente ho capito! Siete stati molto utili!

    Ciao!
    Ciamiz

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.