mikrocontroller.net

Forum: PC-Programmierung Speicher allokieren - Strings ausgeben


Autor: Cplusi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Leute!

Ich habe folgendes Problem:

Ich möchte ein Programm schreiben, welches 3 Strings nacheinander vom 
Benutzer entgegennimmt. Anschließend soll es je nach Länge der 
eingegebenen Strings Speicher allokieren (mittels 'new()'). Leider 
klappt die Ausgabe der Strings nicht.
Den ersten String gibt er richtig aus. Anstelle des 2. Strings liefert 
er mir den dritten. Anstelle des 3. Strings irgendwelche ASCII-Zeichen, 
die nie eingegeben wurden.

Ich hoffe ihr könnt mir helfen!

Vielen Dank!


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGTH 70

using namespace std;


int main (void)
{
  char puffer1[MAX_LENGTH],puffer2[MAX_LENGTH],puffer3[MAX_LENGTH];
  char *dyn_string1, *dyn_string2, *dyn_string3;
  
  

  cout << "Geben Sie bitte den ersten String ein: " << endl;
  fgets(puffer1,MAX_LENGTH,stdin);
  dyn_string1 = new char[strlen(puffer1)+1];


  cout << "Geben Sie bitte den zweiten String ein: " << endl;
  fgets(puffer2,MAX_LENGTH,stdin);
  dyn_string2 = new char[strlen(puffer2)+1];

  cout << "Geben Sie bitte den zweiten String ein: " << endl;
  fgets(puffer2,MAX_LENGTH,stdin);
  dyn_string3 = new char[strlen(puffer3)+1];

  
  if((*dyn_string1 || *dyn_string2 || *dyn_string3 ) == NULL) 
  {
    printf("Fehler!");
  }
  else 
  {

  strcpy(dyn_string1,puffer1);
  strcpy(dyn_string2,puffer2);
  strcpy(dyn_string3,puffer3);

  cout << "Der erster String lautet:" << endl;
  printf("%s",dyn_string1);
  
  cout << "Der zweiter String lautet:" << endl;
  printf("%s",dyn_string2);

  cout << "Der dritter String lautet:" << endl;
  printf("%s",dyn_string3);
  
  }


  system("pause");


}


Autor: Albert ... (albert-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast dich verschrieben:
 cout << "Geben Sie bitte den zweiten String ein: " << endl;
  fgets(puffer2,MAX_LENGTH,stdin);
  dyn_string2 = new char[strlen(puffer2)+1];

  cout << "Geben Sie bitte den zweiten String ein: " << endl;
  fgets(puffer2,MAX_LENGTH,stdin);
  dyn_string3 = new char[strlen(puffer3)+1];

Im zweiten Abschnitt muss beim fgets natürlich auch eine 3 stehen

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cplusi schrieb:
> if((*dyn_string1 || *dyn_string2 || *dyn_string3 ) == NULL)

Das kann so nicht gehen.

Das Ergebnis der logischen Verknüpfung des ersten Zeichens dreier 
Strings kann nicht NULL sein.

Du willst folgendes:

  if (!dyn_string1 || !dyn_string2 || !dyn_string3)

Autor: rogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann sich das leben aber denk ich auch vereinfachen, indem man 
fertige sachen benutzt:
zB:
std::string und std::cin

klärt mich bitte auf wenn ich falsch liege...

rogger

Autor: Cplusi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok vielen Dank!! :)

Hat geklappt.

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

Bewertung
0 lesenswert
nicht lesenswert
rogger schrieb:

> klärt mich bitte auf wenn ich falsch liege...

Nö.
Du liegst goldrichtig.
Nur glaubt dir das keiner. Leider.
Alle denken immer, sie müssen mit C-Strings anfangen, anstelle die 
perfekt funktionierende std::string Klasse zu benutzen. Leider auch C++ 
Lehrbücher.

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.