[c] ciclo con array multidimensionale

di il
4 risposte

[c] ciclo con array multidimensionale

Ciao, il codice sottostante non mi funziona!!
int i, j;
char linea[801];
char split[801];
char matrix[801][801];

if( condizione di verifica )
{
i = 0;
j = 0;
strcpy(split, linea);

while (split[i] != '\0') {
if (split[i] == '$') {
j++;
}
else {
strcat(matrix[j], split[i]);
}
i++; 
}

fprintf(stdout, "%s", matrix[i]); 
}

se metto il seguente codice
while (split[i] != '\0') {
if (split[i] == '$') {
split[i] = '\n';
}
i++;
} 
funziona correttamente creandomi un unica stringa con gli elementi a capo senza carattere $......
però mi piacerebbe avere una matrice matrix[0][stringa prima del primo $]..matrix[1][stringa prima del secondo $] eccc
invece la funzione restituisce del testo incomprensibile!!

ciao e grazie

4 Risposte

  • Re: [c] ciclo con array multidimensionale

    Ciao,

    C'è qualche problema di fondo nel ciclo... la strcat si aspetta innanzitutto due cose:
    1) matrix[j] deve essere una stringa... tu non hai inizializzato a 0 il contenuto di matrix e non è assicurato che esso non contenga dello sporco. Dovresti almeno impostare matrix[j][0] a '\0' per ogni j
    2) Quello che concateni deve essere una stringa... tu invece passi split (che è un char). Il compilatore dovrebbe emettere una warning, e comunque, visto che ti sposti un carattere dopo l'altro, anche se funzionasse otterresti qualcosa di non voluto (concatenando tutte le sottostringhe dal carattere i-esimo in poi).

    Probabilmente potresti superare entrambi i problemi evitando la strcat ed andando a scrivere su matrix[j][k++]=split, con k azzerato ogni volta che trova un $. In questo caso ricorda anche di inserire un '\0' di terminazione (ad esempio, prima di j++, matrix[j][k]='\0'; )

    Ciaociao
  • Re: [c] ciclo con array multidimensionale

    Così ?????
    i = 0;
    j = 0;
    k = 0;
    
    strcpy(split, linea);
    
    while (split[i] != '\0') {
     if (split[i] == '$') {
    	 matrix[j][0] = '\0';
    	 matrix[j][k]='\0';
    	 j++;
    	 k=0;
      }
      else {
    	matrix[j][k++]=split[i];
      }
    i++;
    }
    grazie mille per l'aiuto!!!
  • Re: [c] ciclo con array multidimensionale

    Ciao,

    Quasi ci siamo, ma sposta quella matrix[j][0] = '\0'; dopo la j++... non vorrai certo azzerare la stringa su cui hai lavorato fino a quel punto

    Ciaociao
  • Re: [c] ciclo con array multidimensionale

    FuNzIoNa!!!!!

    grazie ancora
Devi accedere o registrarti per scrivere nel forum
4 risposte