Forum: Compiler & IDEs pointer Nutzung


von Chris (Gast)


Lesenswert?

Hallo,

ich habe folgendes Problem: Ich möchte das zweite char aus einem String 
auslesen und in ein Int umwandeln und dies habe ich folgendermaßen in 
Code umgesetzt: (Auszug)
1
extern char usart_buffer[usart_buffer_lenght];
2
3
int controll_word;
4
char *change_char;
5
6
*change_char = usart_buffer[2];
7
controll_word = atoi(change_char);
Wenn ich das so mache kommt folgende Warnung:

../action.c:56: warning: 'change_char' is used uninitialized in this 
function

Mir gefällt meine Vorgehensweise nicht richtig, hat vieleicht jemand 
eine bessere Idee wie man das lösen kann?

Der Hintergrund ist folgender. Die ersten beiden Zeichen in dem 
usart_buffer ist ein Steuerzeichen und das nächste Zeichen also 
usart_buffer[2] ist die "Anweisung".

vielen dank im vorraus

Chris

von Sven P. (Gast)


Lesenswert?

Chris wrote:
> ../action.c:56: warning: 'change_char' is used uninitialized in this
> function
Da hatter vollkommen Recht... du machst zwar "*" mit dem Zeiger, aber 
der zeigt ja noch in die Wildnis...

Stichworte:
- malloc, free,
- statische Arrays.

von ich (Gast)


Lesenswert?

So geht es ja mal wohl nicht atoi kann nur Strings umwandeln und weder 
change_char noch ein Element aus dem String erfüllen diese Eigenschaft.
1
char c[2];
2
  
3
4
c[0]=usart_buffer[2];
5
c[1]='\0';
6
7
controll_word = atoi(c);

von Chris (Gast)


Lesenswert?

Wenn ich
1
controll_word = atoi(usart_buffer[2]);
nutze kommt dieser Fehler:

../action.c:57: warning: passing argument 1 of 'atoi' makes pointer from 
integer without a cast

ich denke versuche mal svens weg,bin aber nicht sicher wie das geht kenn 
das nur mit new und delet aus c++.

von Helmut L. (helmi1)


Lesenswert?

>Wenn ich

>controll_word = atoi(usart_buffer[2]);


>nutze kommt dieser Fehler:

>../action.c:57: warning: passing argument 1 of 'atoi' makes pointer from
>integer without a cast

Da meckert er auch zu recht.


controll_word = atoi(&usart_buffer[2]);

So sollte er nicht mehr meckern.

Wenn aber nur das zweite Zeichen gemeint ist kannst du auch schreiben:

controll_word = (int)(usart_buffer[2] - '0')

Gruss Helmi

von Klaus (Gast)


Lesenswert?

> controll_word = (int)(usart_buffer[2] - '0')


so isses!

von Chris (Gast)


Lesenswert?

Vielen Dank für die Hilfe es klappt auch! Aber warum bei:
1
(int)(usart_buffer[2] - '0')
-'0' ???

von Falk B. (falk)


Lesenswert?

Umwandlung von ASCII-Code in binär.

von Simon K. (simon) Benutzerseite


Lesenswert?

Aber eben nur für Ziffern(einstellig!).

von Helmut L. (helmi1)


Lesenswert?

Val = 0;
p = usart_buffer+2;

while(isdigit(*p))
   Val = Val * 10 + (int)(*p++ - '0');

So gehts auch mit mehreren Ziffern. Es wird gewandelt bis was anderes 
als eine Ziffer kommt.

Gruss Helmi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.