Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] 2D Vektor mit Funktion ausgeben
char** ist aber korrekt. Du hast irgend nen anderen Fehler dann. Code zeigen.
Das ist nicht der vollständige Code, tut mir leid.
del_4901
2010-12-07, 23:44:13
Gibt er alles in einer Zeile aus? Das liegt dann wohl an dem verrutschten newline.
robobimbo
2010-12-07, 23:45:36
void Print_2DVek_Char (char *v, int n, int n2) {
int i,j;
// char *pv = v;
for (i=0;i<n;i++){
for (j=0;j<n2;j++){
printf("%c ",v[i*n2+j]);
};
printf("\n");
};
}
int main(int argc, char **argv)
{
char v[5][5] = {
{ '0', '1', '2', '3', '4' },
{ '5', '6', '7', '8', '9' },
{ ' ', ' ', ' ', '*', ' ' },
{ ' ', ' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ' },
};
Print_2DVek_Char(&v[0][0], 5, 5);
return 0;
}
Du hast ein Array aus Arrays.
Das erste Element in dem äusseren Array ist also ein Array, daher funktioniert der Pointer auf einen Pointer nicht, sonder es ist ein Pointer auf ein Array...
Im Code ist ein Workaround dazu, übergib an die Funktion die Adresse des ersten Elements des ersten Arrays und rechne dann die Position dazu aus...
Detailinfo siehe: http://www.lysator.liu.se/c/c-faq/c-2.html
definiere v als pointer char** und erzeuge den speicherplatz mit new. Type[N] kannst normal als pointer mittels &-Operator übergeben. Bei Type[N][M] wirds aber ungemütlich, oder du schreibst deinen Funktionskopf in char*[5] um.
#include <stdio.h>
//#include "mylib.h"
void Print_2DVek_Char (char v[5][5], int n, int n2) {
int i,j;
for (i=0;i<n;i++){
for (j=0;j<n2;j++){
printf("%c ",v[i][j]);
};
printf("\n");
};
}
int main() {
int i,j,n=5,n2=5;
char v[5][5] = {
{ ' ', '*', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', '*', ' ' },
{ ' ', ' ', ' ', ' ', ' ' },
{ ' ', ' ', ' ', ' ', ' ' },
};
Print_2DVek_Char(v,5,5);
return 0;
}
Es gibt übrigens eine Menge Bibliotheken mit denen man sowas wesentlich komfortabler machen kann, std::string wäre schonmal ein guter Anfang. Ich verstehe sowieso nicht wieso jemand sich heutzutage noch mit char* rumschlägt...
Nein, du übergibst der Funktion nur einen Pointer auf die Daten, wenn du die Daten änderst, änderst du die Daten also tatsächlich, nicht nur eine Kopie auf dem Stack
robobimbo
2010-12-08, 14:14:56
definiere v als pointer char** und erzeuge den speicherplatz mit new. Type[N] kannst normal als pointer mittels &-Operator übergeben. Bei Type[N][M] wirds aber ungemütlich, oder du schreibst deinen Funktionskopf in char*[5] um.
Gute Frage @ Threadersteller, gehts um C oder C++ ?
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.