String bilden

Gast #1451308
Lesenswert?

Hallo.

Ich habe wieder ein Problem.
Habe folgendes vor...

//zahl1 bis zahl5 sind immer nur einstellige Ziffern (0 bis 9)
unsigned char zahl1=1;
unsigned char zahl2=2;
unsigned char zahl3=3;
unsigned char zahl4=4;
unsigned char zahl5=5;

//daher ist der String immer 5-stellig
char ausgabe[6];

//werden nacheinander eingefügt und bilden einen String
strcat(ausgabe,zahl1);
strcat(ausgabe,zahl2);
strcat(ausgabe,zahl3);
strcat(ausgabe,zahl4);
strcat(ausgabe,zahl5);
strcat(ausgabe,"\0");

//aus dem String einen Long-Wert bilden
unsigned long gesamt=atol(ausgabe);

So klappt es aber nicht... warum ?
Wie kann ich dieses Problem anderes lösen ???

Müssen die Variablen zahl1 bis zahl5 null terminiert sein ?

Danke schon mal
Gast #1451312
Lesenswert?

>Wie kann ich dieses Problem anderes lösen ???

Ein C Buch kaufen.

>Müssen die Variablen zahl1 bis zahl5 null terminiert sein ?

Wenn es Strings wären ja. Es sind aber nur Zahlen
und auch kein ASCII Code.
Gast #1451314
Lesenswert?

..kommt drauf an, was du eigentlich erreichen willst..

z.B. einen String erzeugen (alles Pseudocode):
for ((i = 0; i < länge; i++))
   ausgabe[i] = zahl[i] +'0';
ausgabe[länge] = 0;

..oder eine Zahl mit Basis 10:
ergebnis = 0;
for ((i = 0; i < länge; i++))
   ausgabe *= 10;
   ausgabe += zahl[i];

du kannst auch den Umweg gehen, erst einen String zu erzeugen (nache 
Methode 1) und dann daraus eine Zahl, das macht aber noch nicht so 
richtig Sinn :-)

Ergo nochmals die Frage: Was genau willst Du erreichen? Zum Thema 
'strcat' empfehle ich die Lektüre der Manpage (behelfsweise der Doku) 
★hint★
Gast #1451322
Lesenswert?

Danke Sepp.

Was habe ich vor :

1. Die Variablen zahl1 bis zahl5 erhalten einen einstelligen Wert. 0-9
2. Daraus möchte ich einen String bilden und ausgeben (z.B. LCD)
3. Dann möchte ich daraus einen Long-Wert bilden und damit rechnen...

Das alles ergibt vielleicht nicht den Sinn und dient zu Übungszwecken.

Gruß
Gast #1451332
Lesenswert?

> 1. Die Variablen zahl1 bis zahl5 erhalten einen einstelligen Wert. 0-9
> 2. Daraus möchte ich einen String bilden und ausgeben (z.B. LCD)

Ok, dann die erste Methode:
ausgabe[0] = zahl1 +'0';
ausgabe[1] = zahl2 +'0';
ausgabe[2] = zahl3 +'0';
ausgabe[3] = zahl4 +'0';
ausgabe[4] = zahl5 +'0';
ausgabe[5] = 0;

mach_was_mit_string(ausgabe);

Falls zahl1..zahl5 in einem Array liegt, dann kannst das auch eleganter 
in eine Schleife packen wie oben schon angegeben (auf Indizes 
achten/ggf. anpassen!!)

> 3. Dann möchte ich daraus einen Long-Wert bilden und damit rechnen...

Da hat Deine Methode schon gepasst. Effizienter gehts aber, wenn du 
beides in einem Aufwasch erledigst, das könnte dann z.b. so aussehen:

ergebnis = 0;
for (i = 0; i < länge; i++)
   ausgabe[i] = zahl[i] +'0';
   ergebnis *= 10;
   ergebnis += zahl[i];
ausgabe[länge] = 0;
mach_was_mit_string(ausgabe);
mach_was_mit_zahl(ergebnis);


HTH

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