Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C] array di stringhe

  1. #1

    [C] array di stringhe

    Buonasera,
    ho un problema con gli array di stringhe:
    ho inizializzato così:
    codice:
    char *lista[0];
    Viene passato a una funzione:
    codice:
    contiene(*lista,p, a[c].num[t].id)
    la specifica della funzione è questa:
    codice:
    int contiene(char* str, int l, char *s){
    	int c;
    	if (l==0)
    		return 0;
    	else 
    		for(c=0; c<l; c++){
    			if (strcmp(str[c], s)==0)
    				return 1;
    		}
    		return 0;
    	}
    La funzione contiene mi restituisce 1 o 0 a seconda se la stringa che gli viene passata in input è presente nell'array di stringhe passato sempre in input.

    La funzione mi da problemi in strcmp all'interno della funzione

    Grazie in anticipo per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Ciao , intanto lista è un array di puntatori , dovresti dargli una dimensione diversa da 0 che non ha senso , es . char *lista[4]
    dovrai allocare spazio in memoria per ogni elemento con malloc()
    ovviamente inizializzare ogni elemento con una stringa .
    per passare l'array di puntatori è come passare una matrice .






    codice:
    contiene(lista,p, a[c].num[t].id); //senza *
    
    
    
    int contiene(char** str, int l, char *s)// due **
    Tecnologia

  3. #3
    Avevo messo lista[0] perchè all'inizio la lista è vuota e faccio in seguito un malloc a seconda dei casi...ora mi da un altro problema ma non per quello quindi magari apro un altra discussione

  4. #4
    Un ultima cosa per creare un nuovo elemento della lista questa dichiarazione è corretta?

    codice:
    lista[p]=realloc(lista[p],sizeof(char)*10);
    p è inizializzato a 1 e lista è inizializzata così
    codice:
    char *lista[0];

  5. #5
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    NO.

    immagina una matrice char lista[4][10]

    hai 4 righe , che sono array

    e hai 10 colonne che sono char

    ------------------

    se dichiari char *lista[4]
    è come se avessi una matrice dove le righe sono dichiarate , e devi dichiarare il numero di colonne .

    for(i=0;i<4;i++)
    lista[i]=(char*)malloc(sizeof(char)*10)


    ora hai una matrice di 4 array di 10 elementi char



    le righe non possono essere zero 0

    la spiegazione non è tecnica , e i termini forse non sono corretti , MA CREDO che ti possa chiarire dove stai sbagliando , spero che chi leggerà mi vorrà scusare
    Tecnologia

  6. #6
    Il mio scopo è quello di creare un'array di stringhe, quindi dove il numero di colonne ovvero la lunghezza delle stringhe è max 10(11 contando il carattere terminatore) ma non sò il numero delle righe ovvero quante stringhe ho.

    Come posso fare?

  7. #7
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    devi usare matrici dinamiche


    char ** lista;


    lista=(char**)malloc(sizeof(char*)*numero_righe); //creo le righe della matrice

    for(i=0;i<numero_righe;i++)
    lista[i]=(char*)malloc(sizeof(char)*numero_colonne);//creo le colonne
    Tecnologia

  8. #8
    Ok ma io all'inizio sò solo il numero di colonne, non sò il numero di righe
    codice:
    	int c,t;
    	char** lista[p];
    	int p=1;
    	for(c=0; c<n; c++){
    		for(t=0; t<b[c].n; t++){
    			if(contiene(lista,p-1, b[c].abc[t].id)==0){
    				lista[p]=(char**)malloc(sizeof(char*));
    				lista[p]=(char*)malloc(sizeof(char)*10);
    				strcpy(lista[p], b[c].abc[t].id);
    				p++;
    			}
    		}
    	}
    non mi dà nessun problema in compilazione ma in esecuzione mi da segmentation fault (core dumb)

  9. #9
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    char** lista[p]

    io non ho scritto cosi , mi pare , ma char** lista;

    sicuramente la matrice dovrà avere almeno una riga , poi da spezzoni sparsi di codice , intuire cosa vuoi fare è come avere la sfera di cristallo che non funziona


    prima allochi spazio per una riga con malloc() , poi dovrai in qualche modo sapere se deve essere aggiunta una riga , e userai realloc()

    qualcosa del genere , ma devi adattarlo alle tue esigenze specifiche

    codice:
    char **lista;
    int contatore=0,scelta ;
    lista=(char**)malloc(sizeof(char*)); //prima riga
    
    lista[contatore]=(char*)malloc(sizeof(char)*11);//colonne
    
    while(1)
    {
       printf("vuoi inserire un altro elemento 1 =si\n");
       scanf("%d",&scelta);
       if(scelta==1)
       {
            contatore++;
            lista=(char**)realloc(lista,sizeof(char*)*(contatore+1));
            lista[contatore]=(char*)malloc(sizeof(char)*11);
       }
       else 
             break;
    
    
    
    }
    Tecnologia

  10. #10
    Scusa avevo provato una cosa e poi ho dimenticato di correggere quando ho copiato il codice.... comunque ho risolto c era un errore nell indice dell array del printf.

    Grazie mille dell aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.