Forum: PC-Programmierung Speicher allokieren - Strings ausgeben


von Cplusi (Gast)


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!


1
#include <iostream>
2
#include <stdio.h>
3
#include <stdlib.h>
4
#include <string.h>
5
6
#define MAX_LENGTH 70
7
8
using namespace std;
9
10
11
int main (void)
12
{
13
  char puffer1[MAX_LENGTH],puffer2[MAX_LENGTH],puffer3[MAX_LENGTH];
14
  char *dyn_string1, *dyn_string2, *dyn_string3;
15
  
16
  
17
18
  cout << "Geben Sie bitte den ersten String ein: " << endl;
19
  fgets(puffer1,MAX_LENGTH,stdin);
20
  dyn_string1 = new char[strlen(puffer1)+1];
21
22
23
  cout << "Geben Sie bitte den zweiten String ein: " << endl;
24
  fgets(puffer2,MAX_LENGTH,stdin);
25
  dyn_string2 = new char[strlen(puffer2)+1];
26
27
  cout << "Geben Sie bitte den zweiten String ein: " << endl;
28
  fgets(puffer2,MAX_LENGTH,stdin);
29
  dyn_string3 = new char[strlen(puffer3)+1];
30
31
  
32
  if((*dyn_string1 || *dyn_string2 || *dyn_string3 ) == NULL) 
33
  {
34
    printf("Fehler!");
35
  }
36
  else 
37
  {
38
39
  strcpy(dyn_string1,puffer1);
40
  strcpy(dyn_string2,puffer2);
41
  strcpy(dyn_string3,puffer3);
42
43
  cout << "Der erster String lautet:" << endl;
44
  printf("%s",dyn_string1);
45
  
46
  cout << "Der zweiter String lautet:" << endl;
47
  printf("%s",dyn_string2);
48
49
  cout << "Der dritter String lautet:" << endl;
50
  printf("%s",dyn_string3);
51
  
52
  }
53
54
55
  system("pause");
56
57
58
}

von Albert .. (albert-k)


Lesenswert?

Du hast dich verschrieben:
1
 cout << "Geben Sie bitte den zweiten String ein: " << endl;
2
  fgets(puffer2,MAX_LENGTH,stdin);
3
  dyn_string2 = new char[strlen(puffer2)+1];
4
5
  cout << "Geben Sie bitte den zweiten String ein: " << endl;
6
  fgets(puffer2,MAX_LENGTH,stdin);
7
  dyn_string3 = new char[strlen(puffer3)+1];

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

von Rufus Τ. F. (rufus) Benutzerseite


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)

von rogger (Gast)


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

von Cplusi (Gast)


Lesenswert?

ok vielen Dank!! :)

Hat geklappt.

von Karl H. (kbuchegg)


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.

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.