Forum: Compiler & IDEs char einem String hinzufügen


von Marc v. (ultronix)


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.

von Peter II (Gast)


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);

von Tom M. (Gast)


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.

von Marc v. (ultronix)


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

von Marc v. (ultronix)


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?

von Marc v. (ultronix)


Lesenswert?

wie wandle ich den String (daten) am besten in eine Fließkomma-Zahl?

strtol?
oä.

von Peter II (Gast)


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

von Karl H. (kbuchegg)


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.

von Marc v. (ultronix)


Lesenswert?

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

von Udo S. (urschmitt)


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?

von Karl H. (kbuchegg)


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.

von Marc v. (ultronix)


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.

von Karl H. (kbuchegg)


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.

von Marc v. (ultronix)


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.

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.