[RISOLTO] ARITMETICA DEI PUNTATORI C

di il
8 risposte

[RISOLTO] ARITMETICA DEI PUNTATORI C

Salve a tutti, ho bisogno di una spiegazione e solo voi potete aiutarmi
ho questo programma di un esercizio:
#include <stdio.h>

char *f(char *s, char *t, char *out) ;

int main(void)
{
char s[] = "ISBN-978-8884981431";
char t[] = "ISBN-978-8863720181";
char out[10];

printf ("%s\n", f(s,t,out));
return 0;
}

char *f (char s[], char t[], char out[]) {
int i;
for(i=0; s[i] == t[i]; i++)
	out[i] = s[i];
out[i] = '\0';
return &out[0];
}
mi chiede di scrivere la funzione con l'aritmetica dei puntatori, ma non so come fare. conosco l'aritmetica ma non lo riesco a tradurre in nessun modo mi spegate come fare please ??

8 Risposte

  • Re: [RISOLTO] ARITMETICA DEI PUNTATORI C

    La funzione l'hai portotipizzata bene ma dichiarata male.Dichiarala come nel prototipo.
    Poi cosa non riesci a capire sulla alritmetica dei puntatori?
  • Re: [RISOLTO] ARITMETICA DEI PUNTATORI C

    Si scusa perchè la stavo modificando e non ho completata
    ti scrivo la traccia dell'esercizio cosi capisci meglio:
    "Dopo aver indicato l’output del seguente programma, riscrivere la funzione f us-
    ando l’aritmetica sui puntatori invece dell’indicizzazione dell’array (dovranno essere eliminate
    tutte le occorrenze della variabile i e tutti gli usi dell’operatore [])."
  • Re: [RISOLTO] ARITMETICA DEI PUNTATORI C

    Invece di accedere all'array tramite un indice, es.
    for(i=0; s[i] != '\0'; i++)
    accedi direttamente con un puntatore, es.:
    for(; *s != '\0'; s++)
    Quindi il tuo for lo puoi cambiare in
    for(; *s == *t; s++, t++) {
       *out = *s;
       out ++;
    }
    Alla fine, per terminare la stringa out diventa semplice:
    *out = '\0';
    mentre per la return devi esserti fatto una copia del puntatore out in input (ricorda che &vett[0] è uguale a vett), es.
    
    char *outoriginal=out;
    ...
    return outoriginal;
    
    Oppure invece di salvare il valore originale puoi utilizzare un altro puntatore per fare il ciclo al posto di out e ritornare poi out (alla fine poco cambia).
  • Re: [RISOLTO] ARITMETICA DEI PUNTATORI C

    Grazie candaluar
    un ultima cosa ho modificato il programma così secondo le tue direttive:
    #include <stdio.h>
    
    char *f(char *s, char *t, char *out);
    
    int main(void)
    {
    char s[] = "ISBN-978-8884981431";
    char t[] = "ISBN-978-8863720181";
    char out[10];
    
    printf ("%s\n", f(s,t,out));
    return 0;
    }
    
    char *f(char *s, char *t, char *out) 
    {
    for(;*s==*t;s++,t++)
    {
     *out=*s;
     out++;
    }
    *out='\0';
    
    char *nuout=out;
    
    return nuout;
    }
    me lo compila ma in output non mi da niente, devo correggere anche nel programma principale?
  • Re: [RISOLTO] ARITMETICA DEI PUNTATORI C

    Se inizializzi nuout alla fine, copiandoci out, questo punterà alla fine della stringa (e quindi al carattere null) perchè out lo hai fatto avanzare.
    nuout deve essere inizializzato all'inizio della funzione, per salvare l'inizio della stringa.
  • Re: [RISOLTO] ARITMETICA DEI PUNTATORI C

    Grazie mille
  • Re: [RISOLTO] ARITMETICA DEI PUNTATORI C

    
    #include <stdio.h>
    
    char *f(char *s, char *t, char *out);
    
    int main(void)
    {
        char s[] = "ISBN-978-8884981431";
        char t[] = "ISBN-978-8863720181";
        char out[10];
    
        printf ("%s\n", f(s,t,out));
        return 0;
    }
    
    char *f(char *s, char *t, char *out)
    {
        char st* = out;
    
        while ( *s && *t  && *s == *t++  )
            *out++ = *s++;       
        *out = '\0';
    
        return st;
    }
    
  • Re: [RISOLTO] ARITMETICA DEI PUNTATORI C

    Dimenticavo naturalmente la tua applicazione va in buffer overflow.
Devi accedere o registrarti per scrivere nel forum
8 risposte