C problema
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 12 di 12

Discussione: C problema

Cambio titolo
  1. #1
    l' oscuro nemico L'avatar di morgoth90
    Registrato il
    05-06
    Località
    C LikeLandia
    Messaggi
    2.275

    C problema

    compilando in C con gcc ho notato che se scrivo
    char *s="prova";
    e passo il puntatore ad una funzione il puntatore punta a valori sbagliati

    mentre se faccio
    char s[5];
    s[0]='p';
    s[1]='r';
    s[2]='o';
    s[3]='v';
    s[4]='a';

    funziona, da precisare è che lo compilo in modo da non utilizzare chiamate all OS ne funzioni standard
    è possibile quindi che il primo caso non funzioni o è colpa mia?

    il problema lo fa anche se scrivo write("prova");
    Ultima modifica di morgoth90; 23-04-2008 alle 15:31:41



    ESISTE UN UNICO AMMINISTRATORE


  2. #2
    Utente L'avatar di doomersek
    Registrato il
    11-07
    Messaggi
    837
    puoi postare il codice?

  3. #3
    l' oscuro nemico L'avatar di morgoth90
    Registrato il
    05-06
    Località
    C LikeLandia
    Messaggi
    2.275
    il codice è solo questo, il puntatore ed il vettore semplicemente poi se passato ad una funzione non punta all' area giusta.
    il mio dubbio è se possa essere un errore di compilazione o devo impostare meglio io il boot



    ESISTE UN UNICO AMMINISTRATORE


  4. #4
    java is forever
    Ospite
    Come lo usi nella funzione?

  5. #5
    l' oscuro nemico L'avatar di morgoth90
    Registrato il
    05-06
    Località
    C LikeLandia
    Messaggi
    2.275
    scorro tutti i caratteri e li metto a video, la funzione non dovrebbe essere il problema.
    è possibile che facendo char *s="prova"; la memoria venga allocata in modo diverso? magari viene chiamato l'os?



    ESISTE UN UNICO AMMINISTRATORE


  6. #6
    java is forever
    Ospite
    Citazione morgoth90 Visualizza Messaggio
    scorro tutti i caratteri e li metto a video, la funzione non dovrebbe essere il problema.
    è possibile che facendo char *s="prova"; la memoria venga allocata in modo diverso? magari viene chiamato l'os?
    Si, viene usate memoria diversa
    Da quel che ho capito a lezione di o.s., facendo char *s = "ciao" si usa memoria a sola lettura mentre con char s[] = "ciao" si usa memoria r/w

    Come scorri l'array?

    Codice:
    register int i;
    
    for (i = 0; i < strlen(s); i++) {
      printf("%c", *(s + i));
    }

  7. #7
    l' oscuro nemico L'avatar di morgoth90
    Registrato il
    05-06
    Località
    C LikeLandia
    Messaggi
    2.275
    si pi&#249; o meno cos&#236;, senza tutte le funzioni standard
    mi sa allora che il problema del bootloader



    ESISTE UN UNICO AMMINISTRATORE


  8. #8
    Utente nerdcore L'avatar di _Tommo_
    Registrato il
    03-07
    Messaggi
    2.679
    Citazione java is forever Visualizza Messaggio
    *
    Codice:
    register int i;
    
    for (i = 0; i < strlen(s); i++) {
      printf("%c", *(s + i));
    }
    Beh, intanto strlen ha un funzionamento imprevedibile perchè dovrebbe dare la lunghezza fino al char terminale '\0'... quindi se lo usi credo che devi mettere anche '\0'.

    Poi io userei printf("%c", s[i]) che mi sembra molto più chiaro... però non so se funzioni diversamente...
    IndieVault.it forum: La community italiana su Game Dev & Indie Games!

  9. #9
    l' oscuro nemico L'avatar di morgoth90
    Registrato il
    05-06
    Località
    C LikeLandia
    Messaggi
    2.275
    ho risolto, scusate :P il problema non era nel codice
    praticamente copiavo il codice in ram in un indirizzo ma nel linkarlo mi ero dimenticato uno 0 nell indirizzo
    0x1000
    al posto di
    0x10000



    ESISTE UN UNICO AMMINISTRATORE


  10. #10
    java is forever
    Ospite
    Citazione _Tommo_ Visualizza Messaggio
    Beh, intanto strlen ha un funzionamento imprevedibile perchè dovrebbe dare la lunghezza fino al char terminale '\0'... quindi se lo usi credo che devi mettere anche '\0'.
    Di default in un array di char il carattere finale dovrebbe essere aggiunto automaticamente

  11. #11
    l' oscuro nemico L'avatar di morgoth90
    Registrato il
    05-06
    Località
    C LikeLandia
    Messaggi
    2.275
    si, &#232; aggiunto automaticamente



    ESISTE UN UNICO AMMINISTRATORE


  12. #12
    Utente nerdcore L'avatar di _Tommo_
    Registrato il
    03-07
    Messaggi
    2.679
    Citazione java is forever Visualizza Messaggio
    Di default in un array di char il carattere finale dovrebbe essere aggiunto automaticamente
    Già è vero...
    IndieVault.it forum: La community italiana su Game Dev & Indie Games!

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •