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

Discussione: [C] Funzione strncat()

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    6

    [C] Problema su Funzione *strncat

    Ciao a tutti, ho un problema con questo programma:

    #include <stdio.h>
    #include <string.h>

    char *strncat (char *, const char *, int );

    main() {

    char stringa1[100], stringa2[100];
    int x;

    scanf("%s", stringa1);
    scanf("%s", stringa2);
    scanf("%d", &x);

    printf("%s", *strncat(stringa1, stringa2, x));

    return 0;
    }

    char *strncat (char *s1, const char *s2, int n) {

    printf("strncat(s1, s2, n) = %s\n", strncat(s1, s2, n));
    }

    Compilandolo mi da [Warning] conflicting types for built-in function `strncat', non riesco a capire dove sia l'errore (o gli errori )
    Ovviamente il programma viene eseguito ma non funziona correttamente, la funzione strncat dovrebbe prendere n caratteri dalla stringa s2 alla fine della stringa s1, praticamente appende a s1 gli n caratteri di s2, il primo carattere di s2 va a sovrascrivere il carattere \0 di terminazione della stringa s1. Grazie per l'aiuto

  2. #2
    Esiste già una funzione con quel nome definita nell'header string.h.
    Cambia il nome alla tua funzione.

    Attenzione : La tua funzione, richiama continuamente se stessa, e va in loop infinito !
    ( inoltre non restituisce nessun puntatore a char )
    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
    Registrato dal
    Nov 2006
    Messaggi
    6
    Si ho capito, in effetti utilizzando la funzione esistente della libreria string.h mi basterebbe scrivere così:

    #include <stdio.h>
    #include <string.h>

    main() {

    char stringa1[100], stringa2[100];
    int x;

    scanf("%s", stringa1);
    scanf("%s", stringa2);
    scanf("%d", &x);

    printf("%s", strncat(stringa1, stringa2, x));

    return 0;
    }


    in effetti io dovrei riscrivere la funzione da zero, per esempio:
    char *_strncat_(char *s1, const char *s2, int n);
    dopodichè restituire alla fine il valore di _strncat_
    giusto?

  4. #4
    Bene, nella tua funzione _strncat_
    Dovresti come prima cosa cercare la fine della stringa s1, ( puoi usare la strlen() )
    e da qui inizi ad accodare i primi n caratteri di s2, con un ciclo for() del tipo :

    int i
    for( i=0; i<n && s2[i]!='\0'; i++)
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,031
    codice:
    char str1[10]="ab";
    char str2[5]="cdefg";
    char *s;
    
    s=mystrncat(str1, str2, 3);
    printf("%s", s);
    
    
    char *mystrncat(char *s1, const char *s2, int l){
    int last, i;
    
       last=strlen(s1);
       for(i=0; i<l && s2[i]!='\0'; i++)
          s1[last++]=s2[i];
       s1[last]='\0';
       return s1;
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    6
    Mi sorge una curiosità, ma se la stringa che volessi immettere non ha necessariamente una dimensione predefinita?

    char stringa1[100] , stringa2[100];

    Ovviamente se all'inizio del mio programma non inserisco la dimensione massima della stringa mi da errore, dicendomi di non aver inserito nessun valore nell'inizializzazione delle stringhe...

    è possibile non dare un valore predefinito dell'array, o comunque un valore variabile in base alla stringa che si inserisce?

    Altrimenti sarei costretto ad inserire un valore il più grande possibile negli array in modo da soddisfare stringhe di qualsiasi dimensione...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    83
    Eppure è strano io non uso strncat() ma uso strcat() senza la 'n'...
    #include <pgnvni.h>

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da pgnvni
    Eppure è strano io non uso strncat() ma uso strcat() senza la 'n'...
    In che senso "è strano"?

    Sono due funzioni diverse ...

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    6
    Originariamente inviato da pgnvni
    Eppure è strano io non uso strncat() ma uso strcat() senza la 'n'...
    Be in effetti sono due funzioni diverse, quella che dici tu cioè "strcat()" accoda praticamente la stringa s2 al vettore s1. In questo caso il primo carattere di s2 si sostituisce al NULL di terminazione di s1, rstituendo come valore finale il valore di s1.

    Mentre la funzione "strncat " accoda un massimo di n caratteri dalla stringa s2 al vettore s1, sostituendo successivamente il primo carattere di s2 con il NULL di terminazione di s1 come succedeva nella precedente funzione, infine restituisce il valore di s1.

    Come vedi sono due funzioni molto simili fra loro per la manipolazione delle stringhe incluse nella libreria <string.h>

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da SeeKeD
    Mi sorge una curiosità, ma se la stringa che volessi immettere non ha necessariamente una dimensione predefinita?

    char stringa1[100] , stringa2[100];

    Ovviamente se all'inizio del mio programma non inserisco la dimensione massima della stringa mi da errore, dicendomi di non aver inserito nessun valore nell'inizializzazione delle stringhe...

    è possibile non dare un valore predefinito dell'array, o comunque un valore variabile in base alla stringa che si inserisce?

    Altrimenti sarei costretto ad inserire un valore il più grande possibile negli array in modo da soddisfare stringhe di qualsiasi dimensione...
    Per questo problema devi utilizzare l'allocazione dinamica degli array, utilizzando i puntatori.
    Fai una ricerca sul forum, la questione è stata già trattata parecchie volte.


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