View Full Version : [C] Matrici di caratteri
ciao, ho creato una matrice di char e un array di caratteri della stessa lunghezza delle righe della matrice:
char mat[x][y];
char str[y];
io vorrei inserire l'array di carattere alla i-esima riga della matrice, ma se faccio mat[i] = str; mi da errore.. dove sbaglio??
DanieleC88
03-07-2008, 21:16
Il fatto è che stai usando delle array statiche e non dei puntatori. Non puoi assegnare matrice[i] perché non è un indirizzo, se proprio vuoi puoi copiare gli y caratteri della stringa in matrice[i]:
strncpy(matrice[i], stringa, y);
Il fatto è che stai usando delle array statiche e non dei puntatori. Non puoi assegnare matrice[i] perché non è un indirizzo, se proprio vuoi puoi copiare gli y caratteri della stringa in matrice[i]:
strncpy(matrice[i], stringa, y);
grazie, ora riesco a copiarci dentro la stringa.. però adesso ho 1 altro problema:
se accedo a matrice[0] ottengo ad esempio GALLO, ma se accedo a matrice[1] ottengo ALLO, cioè senza la prima lettera... non dovrebbe darmi la seconda riga della matrice??
grazie, ora riesco a copiarci dentro la stringa.. però adesso ho 1 altro problema:
se accedo a matrice[0] ottengo ad esempio GALLO, ma se accedo a matrice[1] ottengo ALLO, cioè senza la prima lettera... non dovrebbe darmi la seconda riga della matrice??
No, per fare questo devi usare la notazione con doppio indice.
Ad esempio matrice[0][0] sarà G, matrice[0][1] sarà A, e matrice[1][0] la prima lettera della seconda riga ;)
Edit: qualora ti chiedessi il perchè di quello strano comportamento, è dovuto al fatto che la stampa di un puntatore a char è eseguita stampando tutte le lettere in zone di memoria adiacenti finquando non viene incontrato il terminatore '\0'.
Se quindi passi un puntatore alla locazione successiva, la stama inizia dalla seconda lettera e procede fino al terminatore ;)
Bye
salvodel
08-07-2008, 16:04
grazie, ora riesco a copiarci dentro la stringa.. però adesso ho 1 altro problema:
se accedo a matrice[0] ottengo ad esempio GALLO, ma se accedo a matrice[1] ottengo ALLO, cioè senza la prima lettera... non dovrebbe darmi la seconda riga della matrice??
Forse perchè ti sei perso un indice?
for(i=0;i<max;i++)
matrice[0][i]=GALLO-->matrice[0][i+1]=ALLO
matrice[1][i]=POLLO-->matrice[1][i+1]=OLLO
se fai cosi funziona?Controlla se riempi per riga o per colonna
Le matrici sono realizzate come vettori di lunghezza righe x colonne.
DanieleC88
08-07-2008, 16:08
Provato ora, funziona.
#include <string.h>
#include <stdio.h>
#define MAX 2
int main()
{
char matrice[MAX][5];
int x;
for (x = 0; x < MAX; ++x)
{
strncpy(matrice[x], "GALLO", 5);
}
printf("%5s\n", matrice[0]);
printf("%5s\n", matrice[1]);
return 0;
}
http://img511.imageshack.us/img511/2876/immagineyz5.th.jpg (http://img511.imageshack.us/my.php?image=immagineyz5.jpg)
penso che l'immagine possa spiegare di +.. :D
ovviamente ha gia fatto il primo ciclo, dove lo strcpy mette la prima stringa nella matrice..
se nello strcpy metto mat[r][c], mi da un errore a runtime di accesso violato..
DanieleC88
08-07-2008, 16:44
Non dovresti dichiararle in quel modo, quando la lunghezza è variabile l'allocazione dinamica è la scelta migliore e che porta meno errori. Il problema probabilmente è solo nell'ispezione dei dati da parte di GDB, prova a stampare i valori con delle printf().
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.