www.mikrocontroller.net

Forum: Compiler & IDEs Zweidimensional Array zu eindimensionalen Array


Autor: pierre Lafourche (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich brauche ihre Hilfe. Wie kann ich ein zweidimensionales Array in 
einer eindimensional Array kopieren.Jeder Wort im eindimensional durch 
ZB ein leeres Zeichen trennen.
Danke

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Problembeschreibung und dein angehängtes Zip-Archiv mit diversen 
XML-Dateien sind IMHO nicht ausreichend, um das Problem zu verstehen, 
geschweige denn, um eine hilfreiche Antwort zu geben.

Autor: Gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
mit dem Bild erkläre ich am besten was ich empfangen will

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> und dein angehängtes Zip-Archiv mit diversen XML-Dateien

Meinst du damit das OpenDocument-File? Es wäre sicher einfacher, das 
z.B. in OpenOffice anzusehen, statt es zu entpacken und den Inhalt im 
Texteditor zu betrachten ;-)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, OpenDocument ist das. Hatte noch nicht das Vergnügen.

Ich hatte Bild.odg heruntergeladen, weil manche Leute die abartigsten 
Dateinamen und -endungen für ihre Bilder wählen. Ich spekulierte darauf, 
dass ein halbwegs aktueller Bildbetrachter (Irfanview) das Bild öffnen 
kann. Beim Download hatte Seamonkey dann automatisch aus Bild.odg 
Bild.odg.zip gemacht. Und da war mein Schritt zum Auspacken mit 7-ZIP 
ein kleiner...

Mir wäre es angenehmer, Pierre hätte die Problemstellung in einem 
einfachen Text geschildert. Dann bräuchte ich ausser dem bereits 
geöffneten Webbrowser kein extra Programm zum Betrachten, OpenOffice 
habe ich nicht installiert und auch keinen Reader für *.docx

Autor: Gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hi,
noch ein anderes Format, ich hoffe es wird jetz klappen.

Danke

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> hi,
> noch ein anderes Format, ich hoffe es wird jetz klappen.
>

Nicht besonders aussagekräftig.

Aber meine Glaskugel hat mir einen Tipp gegeben (damit mal
was witer geht in diesem Thread)
#include <string.h>

int main()
{
  char texte[][8] = { "Wort1", "Wort2", "Wort985" };
  char komplett[512];
  int i;

  komplett[0] = '\0';   // fange mit einem Leerstring an

  for( i = 0; i < 3; ++i ) {
    strcat( komplett, texte[i] );  // das nächste Wort hinten anhängen
    strcat( komplett, " " );       // und dann noch einen String bestehend
                                   // aus einem Leerstring anhängen
  }

  printf( "%s", komplett );
}

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich glaube, dass ich mein Problem falsch vorgestellt habe.
ich habe die Variable so definiert
uint16_t  string[4]; Eigentlich soll der Inhalt einer anderen Variable 
Beispiel buffer in string kopiert

for( int i = 0; i < 5; ++i ) {
 stringt[i]=Ptr->buffer[8];
 printf( "0x%x", string[i] );
}
dann bekomme ich Zum Beispiel:
string[0]=Wort1;
string[1]=Wort2;
string[2]=0x20  usw..
aber ich will nicht jetzt das zweidimensional Array so  definiert, weil 
die Werte ständig verändert werden können.
char texte[][8] = { "Wort1", "Wort2", "0x20" "Wort985" };
sondern jedes Mal der Inhalt von string[0], string[1] in der Variable 
texte haben.
char texte[][8] = { "string[0]", "string[1]"}; ( natürlich falsch aber 
ungefähr in dieser Form).

Danke

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> hi,
> ich glaube, dass ich mein Problem falsch vorgestellt habe.

Das denke ich auch.

> char texte[][8] = { "Wort1", "Wort2", "0x20" "Wort985" };
> sondern jedes Mal der Inhalt von string[0], string[1] in der Variable
> texte haben.
> char texte[][8] = { "string[0]", "string[1]"}; ( natürlich falsch aber
> ungefähr in dieser Form).

Es ist immer noch nicht klar, was du eigentlich willst.
Frage: Sind da jetzt Strings (also Zeichenketten) im Spiel oder nicht.

Hol doch mal etwas weiter aus und beschreibe dein Problem (und
nicht das was du denkst was die Lösung deines Problems ist)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> hi,
> ich glaube, dass ich mein Problem falsch vorgestellt habe.
> ich habe die Variable so definiert
> uint16_t  string[4]; Eigentlich soll der Inhalt einer anderen Variable
> Beispiel buffer in string kopiert
>
> for( int i = 0; i < 5; ++i ) {
>  stringt[i]=Ptr->buffer[8];
>  printf( "0x%x", string[i] );
> }
> dann bekomme ich Zum Beispiel:
> string[0]=Wort1;
> string[1]=Wort2;
> string[2]=0x20  usw..
> aber ich will nicht jetzt das zweidimensional Array so  definiert, weil
> die Werte ständig verändert werden können.
> char texte[][8] = { "Wort1", "Wort2", "0x20" "Wort985" };
> sondern jedes Mal der Inhalt von string[0], string[1] in der Variable
> texte haben.
> char texte[][8] = { "string[0]", "string[1]"}; ( natürlich falsch aber
> ungefähr in dieser Form).
>
> Danke

Angenommen du hast ein Array von z.B. 5 Worten, die zu Programmanfang 
bereits irgendwie vorbelegt sind

char *worte[5] = { "wort1", "wort2", "wort3", "wort4", "wort5" };

Aber die Worte können im Programmablauf auch geändert werden z.B.

worte[3] = "neueswort";

oder

{
  static char buffer[42];
  strcpy(buffer, "irgendwasdynamisches");
  worte[4] = buffer;
}

Jetzt hapert es mit deiner Beschreibung, weil man kann drei 
Fragestellungen aus deinem Posting herauslesen...

Die erste Lesart, passend zum allerersten Posting, hat KHB bereits oben 
vorgestellt, indem eine Extrafunktion alle Worte in einen langen Text 
kopiert. Ich kann mir keinen Weg vorstellen, das in C zur Laufzeit ohne 
eine Extrafunktion automatisch machen zu lassen.

Wenn du die Worte aus einem 1D-Array in ein anderes 2D Array umkopieren 
willst, wäre sowas machbar

#define MAXDIM 8
char texte[5][MAXDIM];
  for (i = 0; i < 5; i++)
  {
    strncpy(texte[i], worte[i], MAXDIM-1);
    texte[i][MAXDIM-1] = '\0';
  }

Eine andere Lesform wäre, dass du weiter mit Pointern arbeitest. Und 
zwar so

char *worte[5] = | "wort1", "wort2", "wort3", "wort4", "wort5" |;
char **texte[5] = { &worte[0], &worte[1], &worte[2], &worte[3], 
&worte[4] };

Das bewirkt z.B.
worte[1] ist "wort2"
texte[1] ist die Adresse (& Operator) von "wort2"
Der Inhalt (* Operator) von *texte[1] ist dann "wort2"

Änderst du worte[1] im Programm dynamisch, bleibt texte[1] weiter die 
Adresse von worte[1], aber bei der Dereferenzierung über *texte[1] 
bekommst du den geänderten Inhalt.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ja es sind Zeichenketten im Spiel,die im ASCII kodiert sind.Ich möchte 
nur der Inhalt im Hezadezimal haben.Ich denke es ist  besser wenn ich 
das Problem im for schleife lösen kann. Bei mir bleibt die Werte von 
Komplett immer gleich.


 for( int i = 0; i < 5; ++i ) {
          strcat( komplett,string[i] );
    strcat( komplett, " " );
    printf( "0x%x", string[i] );
          printf( "0x%x",  komplett );
  }
Danke

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan "stefb" B. wrote:
> worte[3] = "neueswort";
Also da muss ich ja schmunzeln ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.