Vi posto il codice del programmino che stavo realizzando.Il problema e' quello che spiegavo ieri sera.
Questo programma manipola stringhe, in questo caso prende in input una stringa conteneti delle pipe (caso A dello switch)
Inserimento input :
A cane | gatto | pippo | pluto |
Deve restituire tutte le parole che sono divise da pipe :
Output :
0: 'cane '
1: ' gatto '
2: ' pippo '
3: ' pluto '
Il problema si presenta quando inserisco un input contenete più di 4 stringhe divise da pipe (va a modificare il contenuto nella posizione 0) es:
inserendo : A cane | gatto | pippo | pluto | topolino | ottengo:
0: 'X�d '
1: ' gatto '
2: ' pippo '
3: ' pluto '
4: ' topolino'
vorrei sapere come mai viene modificato quel valore.
codice:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
/*Legge da std input e salva in un'unica stringa*/
char *read_word(){
int i = 0;
char c;
char *string = NULL;
c = getchar();
while (c != '\n'){
c = getchar();
string = realloc(string, ++i*sizeof(char));
string[i-1]=c;
}
string[i-1]='\0';
return string;
}
/*elimina dalla stringa il carattere "escape" passato alla funzione */
char **token(char *stringa, char *escape, int *count){
char **out = NULL, *str;
int fine = 1, i=0, j;
out = (char **)malloc(sizeof(char *));
str = strtok(stringa, escape);
out[i] = (char *)malloc((strlen(str)+1)*sizeof(char));
strcpy(out[i],str);
while(fine){
str = strtok(NULL, escape);
if(str != NULL){
i++;
out[i] = (char *)malloc((strlen(str)+1)*sizeof(char));
strcpy(out[i],str);
}else{
fine = 0;
}
}
*count = i+1;
for(j=0; j<*count; j++){
printf("\n%d: '%s'",j,out[j]);
}
}
/* main */
int main(){
char c,*input,**sezioni,**nomi_autori, **citazioni;
int i,count;
while((c=getchar())!='f'){
if(c!='\n'){
switch(c){
/**CASO A**/
case 'A':
input = read_word();
sezioni = token(input, "|", &count);
}
}
}
}