itoa strcat kurze Frage

Gast #6374577
Lesenswert?

Hallo,

kurze Frage:

ist das ok so?
Geht um die immer wieder erneute Nutzung der var_convert

volatile char String_output[120] = "Initwert";
volatile char var_convert[2] = "00";

volatile uint8_t a = 0x10;
volatile uint8_t b = 0x20;
volatile uint8_t c = 0x30;

memset((void *) String_output, 0, 250);
strcpy(String_output,  "Variable a 0x");
strcat(String_output, itoa(a, *var_convert, 16));
strcat(String_output, " Variable b 0x");
strcat(String_output, itoa(b, *var_convert, 16));
strcat(String_output, " Variable c 0x");
strcat(String_output, itoa(c, *var_convert, 16));
strcat(String_output, "\r\n");

Vielen Dank
#6374592
Lesenswert?

IC schrieb:
> ist das ok so?

Nein. Da sind Fehler drin.

> Geht um die immer wieder erneute Nutzung der var_convert

Die ist nicht das Problem.

> volatile char String_output[120] = "Initwert";
> volatile char var_convert[2] = "00";

Damit ist var_convert erst mal kein C-String, da kein Platz mehr für die 
Terminierung ist.

> volatile uint8_t a = 0x10;
> volatile uint8_t b = 0x20;
> volatile uint8_t c = 0x30;
>
> memset((void *) String_output, 0, 250);
> strcpy(String_output,  "Variable a 0x");
> strcat(String_output, itoa(a, *var_convert, 16));

Hier schreibst du über das Ende von var_convert hinaus, da drei Bytes 
Platz benötigt werden ('1', '0', '\0'), aber nur zwei zur Verfügung 
stehen. Das gleiche gilt für die weiteren itoa-Aufrufe.

Übrigens: Warum sind bei dir eigentlich alle Variablen volatile?
Gast #6374600
Lesenswert?

Nein.

An sich sollten beim kompilieren schon Fehlermeldungen und Warnungen 
ausgegeben werden.
Da siehst Du dann - teilweise -, was falsch ist.

Auch die Verwendung von memset solltest Du Dir nochmal ansehen.
Gast #6374613
Lesenswert?

Vielen Dank für die Antworten,

>Damit ist var_convert erst mal kein C-String, da kein Platz mehr für die
>Terminierung ist.
Ja, stimmt. Sollte var_convert[3] sein.

>Warum sind bei dir eigentlich alle Variablen volatile?
War nur für diesen (schnellen und leider mit Fehler geschriebenen) 
Beispiel.

>Auch die Verwendung von memset solltest Du Dir nochmal ansehen.
Kannst bitte auf die Sprünge helfen?
Mache das schon immer so und hatte bislang keine Probleme.

Eigentlich war die Frage, ob ich var_convert so immer wieder nutzen 
kann.
Rolf schrieb:
>Die ist nicht das Problem.
also ist ok so? :-)
Gast #6374627
Lesenswert?

IC schrieb:
> [...]
> War nur für diesen (schnellen und leider mit Fehler geschriebenen)
> Beispiel.
>
>>Auch die Verwendung von memset solltest Du Dir nochmal ansehen.
> Kannst bitte auf die Sprünge helfen?
> Mache das schon immer so und hatte bislang keine Probleme.
>
Dann machst Du es schon immer falsch. :-)
Ich neige dazu, in solchen Fällen keine direkte Antwort zu geben.
Und zwar, weil man, meiner Überzeugung nach, von Fehlern ziemlich viel 
lernt.

> Eigentlich war die Frage, ob ich var_convert so immer wieder nutzen
> kann.
> Rolf schrieb:
>>Die ist nicht das Problem.
> also ist ok so? :-)

Was ist Deine Annahme, aus der heraus Du das fragst? Warum sollte man 
nicht, Variablen beliebig oft neu setzen?

Auch deswegen hielte ich es für gut, wenn Du den Code einfach mal 
kompilierst und laufen lässt.

Ich weiß: Lehrer und die sich dafür halten, sind die Pest am A... :-)
Gast #6375051
Lesenswert?

>Genau. Diesen ganzen Wust an Code kannst Du bequem mit einem einzigen
>snprintf erschlagen.

Leute, das war doch nur ein Beispiel.
snprintf ist mir natürlich bekannt und hätte es in diesem Fall auch 
benutzt.

>Strings muß man nicht löschen. Sobald Du etwas reinschreibst, wird mit
>einer '\0' abgeschlosssen.

Genau das wollte ich wissen, darum auch die Frage wegen var_convert, 
weil ich die immer wieder nutze, aber nicht lösche.

Hatte einen Bug drin, und war mir bloß nicht sicher, ob das an der 
Nutzung der Variable liegt, ohne dass die gelöscht wird.

Bug ist gefunden, der Fehler war woanders.

Ich schätze dieses Forum, aber manchmal kommen die Lehrer und antworten 
auf falsche Fragen.

Vielen Dank, Hilfe war ja da :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren