Errore puntatori C

di il
4 risposte

Errore puntatori C

Buonasera ragazzi!
Abbiamo da poco iniziato i puntatori. Mi trovo alle prese con un problema che non riesco a risolvere: avendo una stringa trattata come array di caratteri, e facendo puntare il puntatore al suo primo elemento, se aumento il puntatore di uno il programma termina!
Per spiegarmi meglio, vi posto il codice:

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

int main() {
	char a[5];
	strcpy(a,"Ciao");
	char *p;
	p=a;
	scanf("%c",&(*p));
	printf("%s\n",a);
	
	p++;
	scanf("%c",&(*p));
	printf("%s\n",a);
	
	system("pause");
	return 0;
}
Eppure non capisco dove sia l'errore, visto che con "p++" non faccio altro che puntare al secondo elemento. Secondo voi qual'è il problema?

4 Risposte

  • Re: Errore puntatori C

    Hai provato a commentare (escludere) le chiamate a scanf()?
  • Re: Errore puntatori C

    scanf("%c",&(*p));
    quella riga è orrenda.
    scanf vuole un puntatore e p è gia un puntatore e quindi basta scrivere:
    scanf("%c",p);
    molto probabilmente l'errore risiede proprio nella scanf.andrebbe svuotato il buffer.
  • Re: Errore puntatori C

    candaluar ha scritto:


    Hai provato a commentare (escludere) le chiamate a scanf()?
    Sì, stampando semplicemente ciò a cui punta il puntatore va bene.

    vbextreme ha scritto:


    scanf("%c",&(*p));
    quella riga è orrenda.
    scanf vuole un puntatore e p è gia un puntatore e quindi basta scrivere:
    scanf("%c",p);
    molto probabilmente l'errore risiede proprio nella scanf.andrebbe svuotato il buffer.
    Sì ma &(*p) è uguale a p, a quanto mi sembra di capire.
    Non funge nemmeno così:
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main() {
    	char a[5];
    	strcpy(a,"Ciao");
    	char *p;
    	p=a;
    	scanf("%c",p);
    	printf("%s\n",a);
    	
    	p++;
    	scanf("%c",p);
    	printf("%s\n",a);
    	
    	system("pause");
    	return 0;
    }
    
    EDIT:
    Ho risolto facendo come hai detto tu, svuotando il buffer con fflush(stdin).
    Posso chiederti però come mai si è reso necessario? Purtroppo queste cose ancora non le abbiamo fatte
  • Re: Errore puntatori C

    Il buffer della stdin non si svuota con la fflush ma cosi:
    
    while(getchar()!='\n);
    
Devi accedere o registrarti per scrivere nel forum
4 risposte