Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] Passagio array multidim. ad una funzione

    Ciao ragazzi,ho un problema nel passare ad una funzione un array di stringhe allocato dinamicamente e un semplice array di caratteri,questo è il codice:
    codice:
    void funz_ord(char** str, char* vect);  //prototipo
    
    
    int main(int argc, char* argv[]){
    
    char **stringa; 
    char swap[15];
    
    ////Salto la parte dell'allocazione
    
    funz_ord(stringa,swap);
    
    }
    
    void funz_ord(char** str, char* vect){
    
    
    }
    La funzione che richiamo deve modificare l'array di stringhe. Il compilatore compila,poi mi da il solito problema di stackdump, ho provato in vari modi e cercato ovunque ma non rieco a capire come fare
    Grazie

  2. #2
    nessuno lo sa ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Se poni il problema così, è impossibile risolverlo perché di sicuro l'errore non dipende da quelle poche righe. Posta tutto il codice se non è troppo lungo; se lo è, isola il problema in qualcosa di più breve.
    every day above ground is a good one

  4. #4
    eccolo:
    codice:
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    void funz_ord(char* str[], char*);
    
    int main(int argc, char* argv[]){
    
    char **stringa; 
    char swap[15];
    int i,cont,k;
    
    printf("Quante parole vuoi inserire?");
    scanf("%d",&cont);
    
    stringa = (char**) malloc(sizeof(char*) * cont); 
    
    for(k=0;k<cont;k++){
    
    	printf("inserire parola: ");
    	scanf("%s",swap);
    	
    		stringa[k] = (char*) malloc(sizeof(char) * (strlen(swap)+1));
    		strcpy(stringa[k],swap); 
    }
    
    
    funz_ord(stringa,swap);
    
    	for(i=0;i<cont;i++){
    	
    		printf("%s\n",stringa[i]);
    	
    	}
    		
    return 0;
    
    }
    
    
    void funz_ord(char* str[],char vect[15]){
    
    /////Qui c'è l'algoritmo di ordinamento lessicografico che non riscrivo.
    
    }

    questo è tutto il codice,sicuramente qualcosa ti ricordi,mi avevi aiutato per un problema precedente,sempre nello stesso programma

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da fusionalfa
    codice:
    void funz_ord(char* str[], char vect[15])
    {
       //Qui c'è l'algoritmo di ordinamento lessicografico che non riscrivo.
    }
    E perchè no?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da simo_85
    E perchè no?
    every day above ground is a good one

  7. #7
    perchè veniva troppo lungo il codice e penso che l'errore non sia li, comunque eccolo:

    codice:
    
    
    void funz_ord(char* str[],char vect[15]){
    
    int i=0,j;
    int c;
    
    
    while(str[i+1]){               
    j=i;
    
    c = strcmp(str[i],str[i+1]);
    
    	if( c >= 0) {
    
    
    		strcpy(vect,str[i]);
    		strcpy(str[i],str[i+1]);
    		strcpy(str[i+1],vect);
    
    		while(j>0){
    				c = strcmp(str[j-1],str[j]);
    			
    				if(c >= 0){
    			
    						strcpy(vect,str[j-1]);
    						strcpy(str[j-1],str[j]);
    						strcpy(str[j],vect);
    					
    						j--;
    					}
    			
    		else j--;
    	
    		}             	
    			i++;
    	}
    
    		else i++;
    		
    }
    
    
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da fusionalfa
    penso che l'errore non sia li
    Per il momento, l'errore è nella funzione.
    Il programma non va in segmentation fault se non viene chiamata, ma si limita a stampare in output le parole inserite.

  9. #9
    quindi la parte della chiamata della funzione è giusta?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Non puoi controllare la condizione di uscita del while in questo modo

    codice:
    while(str[i+1])
    perché se hai n parole, quando i avrà raggiunto valore n-1 andrai ad accedere ad un'area di memoria che non hai allocato e sul cui valore non sai nulla. Al massimo dovresti allocare spazio per una stringa in più, scriverle una stringa convenzionale (ad esempio "end") e impostare il predicato del while così

    codice:
    while (strncmp(str[i+1], "end", 3)
    ma fai molto prima a passare alla funzione anche il numero delle stringhe allocate ("cont") e a riscrivere il while così

    codice:
    while (i < cont - 1)
    codice:
    void funz_ord(char* str[], int, char*);
    ...
    funz_ord(stringa, cont, swap);
    ...
    void funz_ord(char* str[], int cont, char vect[15])
    {
    ...
    while (i < cont - 1) {
    every day above ground is a good one

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 © 2024 vBulletin Solutions, Inc. All rights reserved.