www.mikrocontroller.net

Forum: GCC char einem String hinzufügen


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Marc van den Broek (ultronix)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo, meine ersten Gehversuche in C. Bitte nicht steinigen, habe viele
Posts gelesen, aber nichts gefunden oder die Antwort nicht erkannt.
(Meine Frau sagt ich könnte gut suchen, nur das mit dem Finden 
funktioniert nicht).

Ich möchte ein einkommendes Zeichen (vom UART) einem String hinzufügen.
Aber genau da bekomme ich eine Fehlermeldung.

char zeichen;
char daten[20];


  // die einkommenden Zeichen: @U25.3

  zeichen=comrx();
  if (zeichen=='@')
    {
    zeichen=comrx();
    if (zeichen=='U')
      {
      for (x=0; x<4; x++)
        {
        zeichen=comrx();
        strcat(daten, zeichen); <- Erz.Warnung
        }
      }
    }


Erzeugte Warnung:
passing argument 2 of 'strcat' makes pointer from integer without a cast

Bei Verwendung von strcpy die selbe Warnung.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
strcat braucht 2 strings und nicht nur ein char.

du müsstest aus dem char esrt einen string machen.

char tmp[2];
tmp[0] = zeichen;
tmp[1] = 0;
strcat(daten, tmp);

Autor: Tom M. (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Marc van den Broek schrieb:
> char daten[20];
char *dpointer = daten;

und dann

*dpointer = comrx(); // Zeichen speichern
dpointer++; // Vorspulen

und zu letzt:

*dpointer = '\0'; // String terminieren


Allerdings ist der Ansatz etwas fehleranfällig; dein Programm wird sich 
unweigerlich früher oder später "verschlucken", zB sobald das 
Zahlenformat ändert. Ich würde eher zeilenweise einlesen und dann 
parsen.

Autor: Marc van den Broek (ultronix)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Vielen Dank für die superschnelle Antwort.

Habe es probiert und geht natürlich (Vorschlag Peter).

Ich stelle mich in C doof an. Hoffe das es sich in nächster Zeit bessert 
und ich Euch nicht zusehr nerven muß.

Gruß aus Belgistan,
Marc

Autor: Marc van den Broek (ultronix)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Tom,

Deinen Vorschlag verstehe ich noch nicht.
Muß erst mal etwas Intelligenzwässerchen nachtanken.

Öhm, das mit dem * in *dpointer, was hat es damit auf sich?
Und dann das "Vorspulen" mit dpointer++
Wie kommt das in meinen String daten?

Autor: Marc van den Broek (ultronix)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
wie wandle ich den String (daten) am besten in eine Fließkomma-Zahl?

strtol?
oä.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Marc van den Broek schrieb:
> wie wandle ich den String (daten) am besten in eine Fließkomma-Zahl?
> strtol?
hast du mal gelesen was strtol macht?

Convert string to long integer

versuche es mal mit strtod

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Da du gut im Suchen bist, solltest du mal dein Bücherrregal nach einem 
C-Buch absuchen. Und wenn du keines findest: eines anschaffen.

Programmiersprachen, und C ist da ein ganz spezieller Fall, kann man 
nicht nach dem Muster Try&Error lernen. Da braucht es jemanden/etwas was 
einen durch den Lernprozess durchführt.

Autor: Marc van den Broek (ultronix)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Welches Buch würdest Du mir empfehlen?
Es gibt so viele und bisher habe ich anscheinend nur Fehlkäufe, ...

Autor: Udo Schmitt (urschmitt)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Marc van den Broek schrieb:
> Welches Buch würdest Du mir empfehlen?
Ist nicht ganz einfach
> Es gibt so viele und bisher habe ich anscheinend nur Fehlkäufe, ...
Was hast du denn und warum waren die Fehlkäufe?

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Wenn du schon ein Buch hast:
Du musst es von vorne weg durcharbeiten!

Wichtig: Nicht als 'Gute Nacht Lektüre' zum drüberstreuen lesen sondern 
effektiv durcharbeiten! Die Beispiele ausprobieren, die Beispiele 
variieren, wenn keine Aufgaben am Kapitelende im Buch sind, dann erfinde 
dir welche.

Es macht keinen Sinn im Schnelldurchlauf da durchzurauschen. Das ist wie 
bei lebenden Sprachen: Den Sprachführer an 3 Nachmittagen durchzulesen 
bringt nix.

Autor: Marc van den Broek (ultronix)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich möchte jetzt diese Bücher nicht schlecht machen, denn die meisten 
sind sicherlich OK, vorausgesetzt man wendet sie in den vorgesehenen 
Bereichen an (DOS, Windows, AVR).

Da ich c nur in den AVR's verwende und von C keine Ahnung habe suche ich 
etwas passendes.

Beispiele:
* AVR-Mikrocontroller in C programmieren (Franzis)
   + Gute Einführung in die C-Programmierung in Kombination mit 
Mikrokontrollern
   - geht sehr wenig auf die Details der beigefügten Sourcecodes ein
* C-Programmieren leicht gemacht (Microsoft)
   + Sehr gute Einführung in C
   - keine Basics für AVR (habe ich aber jetzt durch das Buch 
"AVR-Mikrocontroller in C programmieren"
   - erfordert DOS oder Windows 98 (läuft jetzt aber seit gestern auch 
unter XP)
* C++ von null auf hundert
   - zu komplex (mein Fehler: sehe den Wald vor lauter Bäume nicht)
* Messen Steuern Regeln mit USB
   - zu wenig C/C++
   - zu wenig AVR
* AVR-Mikrokontroller in C programmieren (Franzis)
   + vermittelt gut die "Elektronik und Hardware"
   - vermittelt nur die Sprache Processing
   - Processing ist nur etwas kompatibel mit C
   - Buchtitel sollte lauten: AVR-Mikrokontroller in Processing 
programmieren

Die weiteren Buchtitel erspare ich mir hier.

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Marc van den Broek schrieb:

> Da ich c nur in den AVR's verwende und von C keine Ahnung habe suche ich
> etwas passendes.

Dein Fehler besteht IMHO darin, dass du dich zu früh auf 'C auf mit dem 
AVR' konzentrierst.
C ist eine genormte Sprache und als solche funktionieren die Basisdinge 
überall gleich (speziell zb Strinverarbeitung). Ganz egal, ob es sich um 
einen kleinen µC oder einen PC oder einen Mainframe oder einen 
Supercomputer handelt: Der Grundaufbau und die Grundlagen der Sprache 
sind überall dieselben.
Natürlich gibt es dann Spezialitäten, die auf den jeweiligen Systemen 
anders sind. Auf einem Supercomputer wird es nun mal keine Ports geben, 
an denen LED angeschlossen sind.

D.h. C (das ist: die Sprache C an sich) lernen kannst du genausogut auf 
einem PC. Ganz im Gegenteil, es ist sogar vernünftig das zu tun. Denn 
die C Bücher gehen von gewissen Grunddingen aus. Ein C-Lehrbuch setzt 
vorraus, dass ein printf eine Ausgabe auf einer Konsole machen kann. Und 
zwar muss das einfach so funktionieren, ohne dass du als Programmierer 
da etwas machen musst.
Dazu kommt, dass du auf einem PC, eben auch wegen der besseren 
Umgebungsbedingungen wie zb Debugger oder der Möglichkeit sich 
Zwischenergebnisse ganz einfach ausgeben zu lassen, um einiges schneller 
lernst als wie wenn du erst mal 15 Stunden benötigst um die erste 
Ausgabe auf ein Terminal zu erreichen um dir irgendwelche errechnete 
Zahlenwerte ausgeben zu lassen.

Die generelle Empfehlung lautet daher oft:
* lern erst mal C an sich.
* und erst dann die Spezialitäten, die sich in der µC-Programmierung
  ergeben.

Der zweite Punkt fällt um einiges leichter, wenn man sein grundelgendes 
Handwerk erst mal soweit beherrscht, dass gewisse Dinge in Fleisch und 
Blut übergegangen sind.

Es ist nun mal auf lange Sicht vernünftiger, erst mal die Grundlagen der 
Metallbearbeitung zu lernen (Umgang mit Feile, Hammer) als gleich zu 
versuchen, mit einer CNC-Fräse das Gehäuse eines Differentials mit 
möglichst geringem Gewicht zu produzieren.

> * C-Programmieren leicht gemacht (Microsoft)
>    + Sehr gute Einführung in C
>    - keine Basics für AVR (habe ich aber jetzt durch das Buch
> "AVR-Mikrocontroller in C programmieren"
>    - erfordert DOS oder Windows 98 (läuft jetzt aber seit gestern auch
> unter XP)

Ich kenn das Buch nicht. Aber das hört sich nach einer allgemeinen 
Einführung in C an. Genau das was du erst mal brauchst. Erst mal die 
Grundlagen der Sprache lernen. Arrays, Strings, Funktionen, Strukturen. 
All das ist Standard-C (funktioniert also überall gleich), ist aber dein 
Handwerkszeug, wenn es in die Spezialitäten der C-Programmierung auf 
einem AVR geht.

Autor: Marc van den Broek (ultronix)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ok, sehe ich ein.

Die Softw. benötige ich für ein µP gesteuertes Netzteil (mit L200).

Mein Problem wurde aber mit den erhaltenen Antworten sehr 
zufriedenstellend gelöst.

Ich bin Happy, danke.

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net