Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: [C] porting e gestione carattere \0

  1. #1

    [C] porting e gestione carattere \0

    sto facendo un porting di un software in C da HPUX a Linux (premetto che di C conosco poco)

    un codice del genere (semplice esempietto da me creato)

    char string1[4];
    string1[0]='s';
    string1[1]='d';
    string1[2]='d';
    string1[3] = '\0';

    char string2[1];
    string2[0] = 'a';
    printf("\n%s\n", string2);

    char string3[2];
    string3[0] = 'a';
    string3[1] = '\0';
    printf("\n%s\n", string3);

    sotto LINUX genera

    asdd
    a

    mentre sotto HPUX

    a
    a

    come se sotto Linux, la mancanza del carattere '\0' in string2 "sporcasse" la stessa stringa con il contenuto di string1, cosa che non accade sotto HPUX; quando invece si chiude con '\0' come nel caso di string3, il comportamento è uguale

    che mi consigliate?
    visto che ho trovato nel codice degli array non chiusi con \0

    Grazie

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,336
    Ogni string in C dev'essere chiusa con il '\0' ( NULL ). Se questo viene omesso, il comportamento del compilatore è indefinito. Ossia può dare il problema che riscontri fino al crash dell'applicazione.
    Se nel codice hai trovato array non chiusi con '\0', probabilmente sono proprio array e non stringhe intese come tali.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,192
    che mi consigliate?
    Dipende come lavori la stringa, ma è bene utilizzare il null byte finale

  4. #4
    intanto grazie

    cerco di capire come sono quegli array

  5. #5
    chiedo un'altra cosa: sui 2 sistemi operativi i tipi di dati differiscono per alcuni aspetti

    non potrebbe causare problema questa cosa?
    intendo per l'aggiunta (magari anche da parte di alcune funzioni) del '\0'

    grazie e scusate se ho scritto boiate

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,336
    A cosa ti riferisci di preciso?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    ipotizzo un esempio: su un sistema un intero ha una certa grandezza e su un altro, una diversa

    ipotizzo eh, è la prima volta che lavoro con Linux e C, avrò quindi scritto tante boiate

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,336
    Con sizeof(tipo di dato) ottieni la dimensione in bit del dato che ti interessa.
    Qui puoi trovare una tabella con la dimensione tipica dei dati in HPUX:
    http://www.teamnaconsulting.com/comp...2434-90009.pdf
    Una precisazione comunque: In Linux 64bit il tipo long è di 8sbytes (64bit) per default e lo stesso tutti i puntatori, mentre in Linux 32bit i long e i puntatori sono a 4bytes (32bit).
    Controlla se nel sorgente HPUX sono definiti i tipi che trovi qui (almeno i primi quattro):
    http://en.cppreference.com/w/c/types/integer
    definiti in <stdint.h>. Se sono definiti allora non hai problemi riguardo la dimensione del dato, visto che un int32_t avrà sempre 32bit come dimensione a prescindere dalla piattaforma; se non sono definiti è sufficiente crearsi un piccolo header file all'uopo da includere dove serve.
    A ogni modo non dovresti avere grossi problemi nel porting se il programma è scritto con un compilatore recente (2010 in poi) su HPUX
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    grazie

  10. #10
    come controllo con sicurezza se l'array termina con '\0'?
    trovo varie versioni

    grazie

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 © 2017 vBulletin Solutions, Inc. All rights reserved.