esperti in c?

Pubblicità

isee

Utente Attivo
Messaggi
846
Reazioni
3
Punteggio
46
ho 1 pogrammino ke nn funge:asd:. dv prendere in input 10 stringhe e memorizzarle in 1 array, poi ne prendo 1 altra e la confronto con quelle memorizzate x vedere se è uguale ad 1 di quelle appunto. ecco il cod:

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



int main(void)
{



char array[10][100];
char *stringa[10];
char a[100]; // mi serve per prendere in input la stringa da cercare

int k; // mi serve per inizializzare l'array di stringhe
for(k=0;k<10;k++)
stringa[k]='\0';


int i=0;
int pos=0;

char input[20];

printf("\nInserisci 10 stringhe, scrivi ESC per uscire: ");



while ( i<10 ){
gets(input);
printf("\n");
if(!strcmp(input,"ESC")) break;
strcpy(array,input);
i++;
}


printf("\nInserire una stringa : ");
scanf("%s", a);
stringa[5]=a;

pos=found(*array,10,stringa);

if(pos>=0)
printf("\nLa stringa è in posizione %d ",pos);
else printf("\nErrore,stringa non trovata");


system("PAUSE");
return 0;
}

int found ( char *arr,int num,char st){
int u;
for(u=0;u<num;u++)
if( strcmp(arr,st) && !strcmp(arr,"\0"))return u;

return -1;

}
 
Guarda non sono molto esperto in c ma ho sempre saputo che una funzione va dichiarata sempre prima del main quindi found deve essere scritta prima del main poi non sono sicuro che tra le parentesi si deve scrivere (void), di solito si scrive (int argc, const char * argv[]) oppure niente...
 
hai mancato una malloc

Sembra tutto giusto tranne qui:

printf("\nInserire una stringa : ");
scanf("%s", a);
stringa[5]=a; //non hai allocato la memoria per la stringa a

L'array char *stringa[10] è un array di puntatori e non un array di array!
quindi quando assegni qualcosa ad uno dei suoi elementi devi fare spazio in memoria, tramite la malloc.Secondo me andrebbe fatto così:

printf("\nInserire una stringa : ");
scanf("%s", a);
int length=strlen(a); //misuri la lunghezza della stringa a
stringa[5]=(char *) malloc(length*sizeof(char)); //allochi lo spazio necessario
 
Pubblicità
Pubblicità
Indietro
Top