Strlen in c per linux

di il
13 risposte

Strlen in c per linux

Ciao ragazzi ho notato un problema !per contare i caratteri di una stringa usando la strlen in windows li conta giusti ma in linux ne conta sempre uno in piu.quale potrebbe essere il problema?

13 Risposte

  • Re: Strlen in c per linux

    Mi da errore su togli_invio ! Ma solo su Linux riscontro sempre sti problemi :/
  • Re: Strlen in c per linux

    Con Linux il seguente codce:
    #include <stdio.h>
    #include <string.h>
    
    
    int main() {
    
    	char c[16] = "abcd efgh";
    	char * s;
    	size_t lung_c, lung_s;
    
    	lung_c = strlen(c);
    
    	s = "abcd efgh";
    	lung_s = strlen(s);
    	
    	printf("%ld  -  %ld\n", lung_c, lung_s);
    
    	return (0);
    
    }
    mi stampa coerentemente: 9 - 9

    Peppus ha scritto:


    Mi da errore su togli_invio ! Ma solo su Linux riscontro sempre sti problemi :/
    Il problema non è dato da Linux, anch'io riscontro problemi in quel codice:
    1) warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ [-Wformat=]
    printf("\n\n%d",strlen(stringa));

    pertanto il primo argomento della funzione printf( ) va integrato così:
    printf("\n\n%ld",strlen(stringa));

    2) c'è un mero errore di scrittura nel nome della funzione chiamata togli_invio( ), che infatti poi assume il nome: tolgi_invio ( ).
  • Re: Strlen in c per linux

    Ahhh ok grazie mille
  • Re: Strlen in c per linux

    Ho fatto una prova ma tutto dipende con cosa memorizza la stringa ! Perché con gets i caratteri li memorizza giusti solo che su Linux non funziona e invece con fgets ne momorizza uno in più la strlen
  • Re: Strlen in c per linux

     #include <stdio.h>
    #include <string.h>
    
    int main (){
    	
    	char s [30];
    long int dim;
    	printf ("inserisci stringa ");
    	fgets(s-1,30,stdin);
    
    	dim=strlen (s);
    	printf ("%ld",dim);
    	
    	
    }
    
       
    alla fine ho risolto così ma comunque grazie a tutti per l'aiuto
  • Re: Strlen in c per linux

    Intanto deve essere

    fgets(s,30,stdin);

    perché s-1 non ha senso.

    E poi devo togliere il \n finale che la fgets aggiunge a prescindere da Linux o Windows.

    Un modo semplice è inserire dopo la fgets una

    strtok(s, "\n");
  • Re: Strlen in c per linux

    Ah ok perfetto sempre graziee
  • Re: Strlen in c per linux

    maxilrosso ha scritto:


    lo \n finale
    Questa ipotesi suggerita da maxilrosso mi ha fatto tornare sull'argomento: bisogna capire se la tua stringa contiene il comando di "ritorno a capo nuova linea".
    In tal caso è necessario tenere ben in considerazione che detto comando con le specifiche di Windows è:
    0x0D e 0x0A
    laddove invece in Linux il comando è rappresentato dal solo valore:
    0x0A

    Mi domando, in questo caso, se il sistema operativo della macchina condizioni il comportamento della funzione strlen( ).

    Ad ogni modo in ambiente Linux l'uso della funzione strlen( ) con riferimento ad una stringa di questo tenore (terminante con comando nuova riga a capo formato Windows)
    0x61 0x62 0x63 0x64 0x65 0x66 0x0D 0x0A
    mi restituisce, appunto, otto, e non sette.
  • Re: Strlen in c per linux

    Sì ma con strtok (stringa,"\n") risolvo
  • Re: Strlen in c per linux

    Usare strtok per rimuovere '\n' è come usare una bomba atomica per uccidere una fastidiosa zanzara. Usa semplicemente strrchr.
    
    typedef enum {FALSE,TRUE} boolean;
    typedef struct
    {
         char *p data;
         size_t size;
    }
    string_t;
    ....
    .....
    boolean readline(string_t *str)
    {
            char *p;
            if(NULL == str || NULL == str-> data)
            {
                     return FALSE;
            }
            if(NULL == fgets(str->data,str->size,stdin))
           {
                    return FALSE;
           }
           p = strrchr(str->data,'\n');
           if(NULL != p)
           {
                *p= '\0'; /* newline eliminato*/
           }
            return TRUE;
    }
    
  • Re: Strlen in c per linux

    Userò questa allora grazie
  • Re: Strlen in c per linux

    Ma su windows non userai mica il Dev-C++?
  • Re: Strlen in c per linux

Devi accedere o registrarti per scrivere nel forum
13 risposte