char in *char[] kopieren oder konvertieren
-
hallo!
Ich habe folgendes Problem
ich habe eine adresse von einem struct char - array (versteht ihr das)
also
struct array
{
char c;
}blub;nun möchte ich die chars einzeln an eine funktion übergeben...diese funktion nimmt aber nur *char an... und hier liegt mein problem...ich habe chars brauche aber *char habs schon mit
(char*)&blub[i].c); probiert aber leider kopiert er da den ganzen Satz und nicht das element i des arrays...
weiß jemand eine lösung wie ich an das i-te element komme? danke
-
Verstehe nicht ganz was du möchtest?
Ist das so bunt nicht übersichtlicher?struct array { char c; // wie viel Zeichen, glaubst du, bekommst du hier hinein? }blub;
MfG f.-th.
-
ja bunt ist schöner
also ich habe mehrere Methoden und eine speichert einen Satz in das oben genannte struct.
bsp: Ich bin doof
für i=5 würde mir blub[i].c ein b liefern. leider nur das b und nicht die Adresse des b. was ja auch klar ist, da das struct nur chars speichert.
nun hab ich aber eine andere methode, die unbedingt *char (d.h adressen braucht an dennen die chars stehen).
d.h
.... methode(&s, (char*)&blub[i].c) /*liefert leider den ganzen Satz bis zur stelle i und nicht die stelle i selbst*/ ....
nun ist meine frage, wie ich nur eine adresse des iten chars bekomme oder wie ich es kopieren könnte um diese zu bekommen
ich weiß kompliziert
-
Das
&(blub[i].c)
liefert dir die Adresse des Elements c.
Da c schon einchar
ist brauchst du den cast nicht.Aber wofür braucht man ein Array einer
struct
, deren einziges Element einchar
ist?
-
hmm ok also es kann auch sein, dass ich etwas falsch mache...also ich habe folgendes gemacht
struct array *satz; satz = malloc(size*sizeof(char)); file = fopen (infile, "r" ); if (file==NULL) { fputs ("File error readfile2\n",stderr); exit(1); } fseek (file , 0 , SEEK_END); //Ursprung waehlen und zaehlen rewind (file); // "cursor" zurueck setzen satz[0].c = ' '; while ((d = fgetc(file)) != EOF) { satz[i].c = d; i++; } fclose (file); return satz; }
um eine datei ein zu lesen und diese als "array" ab zu speichern...vllt speichere ich einfach falsch ab?
-
OMG
Mach einfach statt
struct array *satz;
einchar *satz;
Lass das .c weg.Das fseek und rewind brauchst duauchnicht, ist schon mit
fopen(...,"r")
gemacht.Die Überprüfung auf i >= size fehlt noch.
Kapitel über Arrays und Strings nochmal lesen
-
anstelle eines OMG könntest du mir vielleicht sagen, was genau an dem Konstrukt falsch ist. Danke
-
Steht doch da.
Nimm ein einfaches Array von
char
Bzw lass satz ein Zeiger aufchar
sein.Du machst das viel zu kompliziert.
Und noch (mehrere) mal die C Grundlagen durchlesen.
-
hab es jetzt abgeändert und die methode liefert immer noch nicht die stelle i sondern die zeichen bis zur stelle i
-
Das hängt davon ab, was deine methode mit der Angabe von deinem
char *
macht.
char *
werden in C (auch) für Zeichenketten benutzt.
-
also ich hab einen stack implementiert und der soll meiner vorstellung nach nur ein char auf den "stack pushen...
[cpp]
struct stackelement
{
struct stackelement *previous;
char *zeichen;
};...
void Push(struct stack *s, char *ptr)
{
struct stackelement nse;
nse = (struct stackelement)malloc(sizeof(struct stackelement));
nse->previous = s->top;
nse->zeichen = ptr;
s->top = nse;
}
-
sorry hier nochmal in schön
struct stackelement { struct stackelement *previous; char *zeichen; }; ... void Push(struct stack *s, char *ptr) { struct stackelement *nse; nse = (struct stackelement*)malloc(sizeof(struct stackelement)); nse->previous = s->top; nse->zeichen = ptr; s->top = nse; }
-
sorry natürlich ich arbeite die ganze zeit mit adressen und nicht mit chars...habs geändert und es funktioniert jetzt...danke fürs Kopf rütteln