|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2002
Città: Cesena
Messaggi: 259
|
[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?? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
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]:
Codice:
strncpy(matrice[i], stringa, y);
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#3 | |
Member
Iscritto dal: Apr 2002
Città: Cesena
Messaggi: 259
|
Quote:
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?? |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
Quote:
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
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. --Gerald Weinberg |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 783
|
Quote:
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.
__________________
"May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." Ultima modifica di salvodel : 08-07-2008 alle 16:06. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Provato ora, funziona.
Codice:
#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; }
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Apr 2002
Città: Cesena
Messaggi: 259
|
![]() penso che l'immagine possa spiegare di +.. ![]() 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.. Ultima modifica di Simo F : 08-07-2008 alle 16:37. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
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().
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:54.