Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    115

    [C] concatenazione stringhe con aggiunta di \0

    salve a tutti...
    ho la necessità di prendere n stringhe da tastiera e aggiungerle dinamicamente ad una stringa di appoggio, ma ogni parola deve essere seguita da un \0.
    successivamente ho bisogno di prendere questa grande stringa contente le mie parole e i \0 e di rispezzarla ad ogni occorrenza di un \0 (ma questa è un'altra storia...)

    come posso fare ad unire le varie parole??

    PS. so che può sembrare una cosa strana ma la concatenazione la fa un client e la separazione la fa un server.

  2. #2
    Forse dovresti usare '\n' come separatore fra le parole, altrimenti
    come riconoscerai la fine della stringa ?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se sei obbligato ad usare il NULL, non puoi usare le funzioni stringa.
    Devi trattare la tua stringa destinazione come se fosse (che poi lo è) un semplice array di caratteri di cui sei obbligato tu a tenere conto della lunghezza raggiunta durante la concatenazione.
    Grosso modo una cosa del genere.

    Codice PHP:
    #define MAXLEN 1024
    char destString[MAXLEN ];

    int cnt,current_destChartotal_len;

    current_destChar total_len 0;
    while(
    total_len MAXLEN ) {
       
    int lenStr strlen(stringaRicevuta)+1;
      for (
    cnt=0cnt lenStr && current_destChar MAXLENcnt++,current_destChar++) {
         
    destString[current_destChar] = stringaRicevuta[cnt];
      }
      
    total_len+=lenStr;


  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    115
    bhe...io sapevo che il terminatore di stringa era \0 ... sbaglio?

    shodan, avevo pensato ank'io ad una soluzione del genere...anke se in realtà aggiungevo io manualmente il \0 dopo aver copiato la stringa nell'array...l'unica differenza è che nn do la dimensione iniziale all'array...può causare dei problemi?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E come indichi la grandezza del buffer?

    Forse se mostri il codice che hai pensato ...

  6. #6
    Originariamente inviato da Fobia
    bhe...io sapevo che il terminatore di stringa era \0 ... sbaglio?
    ...
    Forse non mi sono spiegato bene...

    Inserendo queste stringhe da tastiera :

    Ciao
    come
    va?

    Andranno memorizzate nel buffer in questo modo :

    Ciao\ncome\nva?\n\0 // < NOTA : Un solo terminatore di stringa

    Poi al ricevimento del buffer sarà facile estrarre ogni parola che sarà
    delimitata dal '\n', fino al raggiungimento di '\0'

    Così si risolverebbero molti problemi.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da Fobia
    bhe...io sapevo che il terminatore di stringa era \0 ... sbaglio?
    No, non sbagli.
    Ma è una convenzione del C, se io volessi le le mie stringhe terminassero con il ; nessuno me lo può vietare. Ovvio che dovrei riscrivermi tutte le funzioni perchè risconoscano il ; come terminatore.
    Quando si parla di stringhe C si tende a dimenticare che sono array in tutto e per tutto.
    Se un giorno devi lavorare con array di interi non hai un terminatore predefinito per dirti quanto è lungo l'array, ma devi saperlo tu.

    Addirittura c'è una funzione delle API di Windows riguardante i file files da cestinare (non cancellare) che richiede una stringa dei files separata da NULL e termina con un doppio NULL.

    Se segui questa strada occhio che il debugger ti farà vedere solo la parte dell'array dall'inizio al primo NULL anche se l'array continua.
    Se segui la strada di Samuele probabilmente ti complichi meno la vita.


    La dimensione del buffer l'ho indicata solo per semplicità, nulla ti vieta di allocare dinamicamente l'array, ma la dimensione in ogni caso devi controllarla tu.

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.