Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

1

17.11.2009, 14:39

dynamischer speicher

hi!

ich muss mich im umgehen mit dynamischen speicher üben, vorerst hab ich aber ein anderes problem...

ich hab die getchar() funktion in meine while bedingung eingebaut..

normal sollte die ja bei jeden durchlauf stoppen, aber die while schleife läuft jedes mal 2 mal durch und erst dann kann ich wieder eine eingabe eingeben.. woran könnte das liegen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
  int chr_counter = 0;

  char *input = malloc(sizeof(char) * 2);

  while((input[chr_counter] = (char*)getchar()) != 'x')
  {
    input[chr_counter + 1] = '\0';

    printf("Ausgabe: %s \n", input);

    chr_counter++;
  }


ach ja, mal abgesehen dass alles doppelt ausgegeben wird, ist die ausgabe weiters falsch, da wenn ich z.B "abc" eingebe die ausgabe so aussieht:

Ausgabe: a
b
c

anstatt

Ausgabe: abc

der debugger sagt aber das input so aussieht "abc"
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

2

17.11.2009, 14:45

C-/C++-Quelltext

1
printf("Ausgabe: %s \n", input); 

Guck dir hier mal genau die Escape-Sequenzen an, die du eingebaut hast. Was macht \n ?

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

3

17.11.2009, 14:49

naja.. \n macht mir ne neue zeile?
ist das \n etwa schuld an all meinen problemen? :D
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

4

17.11.2009, 14:50

Nicht an allen, aber an der Falsch formatierten ausgabe ;)

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

5

17.11.2009, 14:53

ohne \n geht auch nicht

macht keinen unterschied, außer dass halt

Quellcode

1
2
3
4
5
6
Array: a
b
c
Array: a
b
c


steht statt

Quellcode

1
2
3
4
5
6
7
Array: a
b
c

Array: a
b
c
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

6

17.11.2009, 14:59

Ach mist.

Aber jetzt. Nach jedem Getchar wird ein Absatz gemacht. (Was auch logisch ist, da man nach jeder Eingabe Enter drücken muss, um sie zu werten)

7

17.11.2009, 15:03

Sag mal, wie wird das denn überhaupt bei dir kompiliert. Du versuchst doch im Kopf der Schleife das Ergebniss von Getchar in einen Char* zu casten, versuchst aber dann
input[irgendwas] einen Char* zuzuweisen.
Immer wenn du den [] Operator auf einen Zeiger anwendest, wird dieser gleich mit Dereferenziert.

also versuchst du einem Char einen Char* zuzuweisen.

EDIT: Achja und: Ich bekomme bei deinem Code auch noch fehler, weil du versuchst dem char* einen void* von malloc zuzuweisen.

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

8

17.11.2009, 15:11

ich gebe ja mit

printf("Ausgabe: %s", input);

den gesamten input auf einmal aus..

getchar() sollte mir ja eigentlich das programm wieder anhalten.. das kanns nicht sein
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

9

17.11.2009, 15:22

du reservierst speicher für 2 char variablen?*mal nachschlag*
das ist zu wenig für "ABC"+nullterminierung oO

warum machst du das überhaupt mit c? in c++ ist das ganze etwas weniger kompliziert und du lernst keine techniken die du dir später wieder abgewöhnen musst oO
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

10

17.11.2009, 15:33

ja ich weiß dass ich zu wenig speicher reserviere, aber damit fang ich erst gar nicht an wenn die wihle schleife jedesmal 2mal druchläuft, da kann ich doch nicht vernünftig speicher reservieren..
ich muss das in c schreiben.. ist vorgegeben..
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Werbeanzeige