pointer auf struktur setzen
-
hi,
wie kann ich einen pointer auf eine bestimmte Stelle einer struktur setzen?
Mein Ziel ist, dass ich einen eingegebenen String so umformatieren möchte, dass er in die Struktur passt. Also ich will das Ding mit der Endekennung versehen, falls der String länger als erlaubt ist.Hier ist die Struktur...
typedef struct artikel { unsigned int artnr; char bez[LBEZ]; float preis; int menge; char hersteller[LHER]; } artikelstruct;
Hier ist die Methode, die den eingegebenen String Zeichenweise zum Ziel-String kopiert, solange bis der eingegebene String "alle" ist, bzw., die maximale länge des Ziel-Strings erreicht ist.
In dem Code können Fehler stecken. Ich konnte das nicht ausprobieren und weiß nicht ob die übergebenen Parameter alle so richtig arbeiten.void strstd(char temp[LZK],char *ziel[],int maxlaenge){ int i; for (i=0;i<maxlaenge;i++){ *ziel[i]=temp[i]; if (temp[i]==0) break; if (i==maxlaenge-1) { *ziel[i]=0; EDIT // hier kommt noch ein break rein break; } } }
Bei folgendem Aufruf der Funktion oben erhalte ich den Fehler, dass das Argument 2 ein inkompatibler Zeiger ist.
strstd(temp,&(data.bez[0]),LBEZ);
Kann mir bitte jemand sagen wie ich mein Problem, entweder auf die Art, oder eine andere, lösen kann?
mfg,
xaser
-
Die korrekte Deklaration wäre:
void strstd(char *temp,char *ziel,int maxlaenge)
char *ziel[] wirkt meines Wissens eher wie char **ziel und du willst eigentlioch keinen Pointer auf einen Pointer auf char.
der korrekte Aufruf wäre
strstd(temp,&(data.bez),LBEZ);
Wobei auch deine Schreibweise zulässig sein könnte. Aber von der Idee her du willst einen pointer auf den String
data.bez und nicht nur auf des erste Element des Strings data.bez[0], wobei allerdings beide auf dieselbe stelle zeigender Bessere Titel wäre eigentlich:
Pointer auf ein ELement einer Struktur setzen
-
Das gibts ja alles schon. sieh dir mal
strncpy(char *dest, const char *src, size_t n);
an
Kurt
-
ZuK schrieb:
Das gibts ja alles schon. sieh dir mal
strncpy(char *dest, const char *src, size_t n);
an
Kurtthx
mfg,
xaser
-
so richtig funktioniert die methode
strncpy auch nicht. sobald der eingegebene string für die bezeichnung zu lang ist, wird die artikelnummer in mitleidenschaft gezogen, d.h. sie wird total verändert.
das gleiche bei dem string für hersteller, wobei jedoch, wenn ich den eingegebenen string an die position von "data.hersteller" Kopiere, bei sehr langen eingaben, der string für die bezeichnung verschwindet, bzw. verändert wird...irgendwie haut das alles nicht hin
ich wäre dankbar für lösungsvorschläge.
mfg,
xazer
-
ich habe den src-string um einiges größer gemacht wie den dest-string, jetzt gehts ohne probs!
mfg,
xaser
-
xaser schrieb:
ich habe den src-string um einiges größer gemacht wie den dest-string, jetzt gehts ohne probs!
mfg,
xaserdh dein problem war also ein bufferoverflow in der eingabe von src-string. in so einem fall hilft das vergrössern des buffers nicht wirklich.
Kurt
-
ZuK schrieb:
dh dein problem war also ein bufferoverflow in der eingabe von src-string. in so einem fall hilft das vergrössern des buffers nicht wirklich.
Kurtbei mir schon, ich hab den buffer der eingabe auf 160 zeichen gesetzt. für einen einfachn herstellernamen oder eine produktbezeichnung die im endeffekt auf 15 zeichen abgeschnitten wird (es wird auch angegeben dass man nur 15 zeichen eingeben sollte) sind 160 zeichen ein genügend großer buffer
und 160 zeichen hab ich mal ganz profilaktisch genommen, mein prof ist so doof, der würde das ding sonst kaputt machen weil er nicht 15 sondern 30 zeichen eingibt, und sich dann wundert warum es nicht geht.mfg,
xaser
-
und was passiert wenn dei prof noch doofer ist und 170 zeiche eingibt ??
Kurt
-
das wird er sicher nicht. der ist so doof und hört am ende der zeile auf zu tippen, weil er meint dass da das ende ist.
mfg,
xazerP.S.: mit genügend doofheit und viel geduld findet man überall nen fehler. mein proggi soll keine kleinen evtualitäten berücksichtigen. ist doch nur ein einstieg
-
gegen 21:30 war ich dann endlich fertig und konnte ein super funktionierendes süßes kleines artikellisten-programm hochladen.
Ich bedanke mich ganz herzlich bei allen die mir geholfen haben, die hilfe kam echt immer superschnell und hat dadurch großes kopfzerbrechen meinerseits verhindert. Vielen Dank!!!
Als kleines Dankeschön gibts hier mal was lustiges zu lesen...
viel Spaß:http://www.spinchat.de/forum/msg?c=112/134d
http://www.spinchat.de/forum/msg?c=112/1244/1357
MfG,
xazer