stringhe con scanf e puntatori Clicca QUI per vedere il messaggio nel forum |
albakiara |
Salve a tutti,
so che sicuramente sarà una cosa banale, ma non ho capito come fare questo:
leggere una stringa di lunghezza non nota con scanf nel main, e passare il puntatore al primo carattere della stringa ad una funzione! Potete scrivermi il codice del main e il prototipo della funzione?
Grazie! |
Cronovirus |
Originally posted by albakiara
Salve a tutti,
so che sicuramente sarà una cosa banale, ma non ho capito come fare questo:
leggere una stringa di lunghezza non nota con scanf nel main, e passare il puntatore al primo carattere della stringa ad una funzione! Potete scrivermi il codice del main e il prototipo della funzione?
Grazie!
Ciao :D nel testo dell'esercizio dice anche quanto può essere lunga al massimo la stringa? |
Cronovirus |
Perchè se non lo chiede puoi farlo così:
#include <stdio.h>
#include <stdlib.h>
void func(const char *p){
while(*p!='\0'){
putchar(*p);
p++;
}
}
int main(void){
char *p = malloc(sizeof(char *));
scanf("%s",p);
func(p);
} |
albakiara |
Grazie per la risposta! :-D
Non è noto niente sulla lunghezza della stringa! io avevo pensato a questo:
printf ("Inserisci stringa:\n");
scanf ("%s", s);
non va bene? |
Cronovirus |
Guarda sopra ;) |
albakiara |
Ho guardato, x questo chiedevo se come ho fatto va bene o no? :) |
albakiara |
Grazie ho risolto il mio esercizio! In pratica il mio errore era non aver allocato lo spazio per char*! |
albakiara |
in realtà, ci sarebbe un altro piccolo problema, se inserisco una stringa contenente degli spazi, il programma non funziona!
ecco il main:
int main (void) {
char ch;
char* s = malloc (sizeof (char*));
if (s == NULL)
exit (1);
printf ("Inserisci stringa: \n");
scanf ("%s", s);
printf ("Inserisci il carattere da eliminare: \n");
scanf (" %c", &ch);
printf ("%s\n", cancella_ch(s, ch));
return 0;
} |
Cronovirus |
E' normale: diverse funzioni di libreria si fermano quando leggono il carattere 'spazio'! dovresti usare un array di puntatori http://linux.die.net/man/3/scanf, in particolare dice riguardo a %s: "Matches a sequence of non-white-space characters; the next pointer must be a pointer to character array that is long enough to hold the input sequence and the terminating null byte ('\0'), which is added automatically. The input string stops at white space or at the maximum field width, whichever occurs first. " |
albakiara |
ah già, grazie :) |
|
|
|