www.mikrocontroller.net

Forum: Compiler & IDEs pointer Nutzung


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)
extern char usart_buffer[usart_buffer_lenght];

int controll_word;
char *change_char;

*change_char = usart_buffer[2];
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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
char c[2];
  

c[0]=usart_buffer[2];
c[1]='\0';

controll_word = atoi(c);


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

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


so isses!

Autor: Chris (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Umwandlung von ASCII-Code in binär.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber eben nur für Ziffern(einstellig!).

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.