Visualizzazione dei risultati da 1 a 6 su 6

Discussione: C strstr

  1. #1

    C strstr

    Ciao a tutti...
    ho il seguente problema... non riesco a far "funzionare" nella maniera corretta la funzione strstr su due puntatori.

    Posto subito il codice così che possiate vedere :


    char* sottostringa (char *p, char *s){
    char *risultato;
    risultato=strstr(p,s);
    return (risultato);
    }
    void main(main){
    char s[200];
    char p[200];
    int i,x;
    printf("Scrivi la prima stringa\n");
    for(i=0;((p[i]=getchar())!='\n')&&(i<200);i++);
    printf("Scrivi la seconda stringa \n");
    for(i=0;((s[i]=getchar())!='\n')&&(i<200);i++);
    printf("%s",sottostringa(p,s));
    getch();
    }

    A questo punto se io scrivo da console per esempio "ciao a tutti" e successivamente "a" dovrei ottenere "ao a tutti" e cioè il risultato corretto del strstr ed invece io ottengo "null"
    perchè ??

    Grazie

  2. #2
    prova a terminare a zero le stringhe in input.....

    codice:
    char* sottostringa (char *p, char *s){ 
      char *risultato; 
      risultato=strstr(p,s); 
      return (risultato); 
    } 
    void main(main){ 
      char s[200]; 
      char p[200]; 
      int i; 
      printf("Scrivi la prima stringa\n"); 
      for(i=0;((p[i]=getchar())!='\n')&&(i<199);i++); 
      p[i]='\0';
      printf("Scrivi la seconda stringa \n"); 
      for(i=0;((s[i]=getchar())!='\n')&&(i<199);i++); 
      s[i]='\0';
      printf("%s",sottostringa(p,s)); 
      getch(); 
    }

  3. #3
    Originariamente inviato da Andrea Simonassi
    prova a terminare a zero le stringhe in input.....

    codice:
    char* sottostringa (char *p, char *s){ 
      char *risultato; 
      risultato=strstr(p,s); 
      return (risultato); 
    } 
    void main(main){ 
      char s[200]; 
      char p[200]; 
      int i; 
      printf("Scrivi la prima stringa\n"); 
      for(i=0;((p[i]=getchar())!='\n')&&(i<199);i++); 
      p[i]='\0';
      printf("Scrivi la seconda stringa \n"); 
      for(i=0;((s[i]=getchar())!='\n')&&(i<199);i++); 
      s[i]='\0';
      printf("%s",sottostringa(p,s)); 
      getch(); 
    }
    Stavo per postarti io, si' cosi' e' giusto..

  4. #4
    Ragazzi grazie per il suggerimento e in effetti ora funziona come si deve, però volevo sapere perchè devo terminare con uno 0 le stringhe di input ??

    grazie ancora

  5. #5
    Perchè la libreria standard del C si aspetta che le stringhe siano terminate a zero, non esiste altra motivazione, è una scelta architetturale discutibile, ma ha sempre funzionato, d'altronde negli anni '70 era il modo piu facile per gestire le stringhe senza creare un apposito tipo string.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Le stringhe di input (ma in generale tutte le stringhe in C/C++) dovrebbero terminare con '\0' (carattere NULL) poichè, in questo modo, la loro manipolazione risulta più semplice: è possibile sapere se si è arrivati alla fine di una stringa semplicemente ponendo come condizione (di un while, o di un for che scorrono la stringa) il carattere stesso (per definizione, infatti, 0 = FALSO e '\0' ha proprio valore numerico 0, mentre tutti gli altri hanno un valore diverso da 0, che vale VERO).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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