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

idontknow

unregistriert

11

17.11.2009, 15:38

Dein reservierter Speicher ist zu klein, wenn du in gesperrten Speicherbereich kommst (was man nicht betimmen kann) crasht dein Programm!
Böse und solte deswegen grundlegend vvermieden werden bzw. darf nicht sein oO

http://www.cplusplus.com/reference/clibrary/cstdio/getchar/

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

12

17.11.2009, 15:51

"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

13

17.11.2009, 15:51

ja nochmal, ich lasse diese zeile:

Quellcode

1
input = realloc(input, act_size += sizeof(char));


weg, weil sie keinen sinn macht, wenn mir die wihle schleife 2mal durchläuft, und erst dann hält...

dann reserviere ich immer 2mal hintereinander sizeof(char) und bekomme erst dann wieder die möglichkeit was zu schreiben..

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <stdlib.h>



int main()
{
  int chr_counter = 0;

  int act_size = sizeof(char) * 2;

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

  while((input[chr_counter] = (char*)(getchar())) != 'x') {

    input[chr_counter + 1] = '\0';

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

    input = realloc(input, act_size += sizeof(char));

    chr_counter++;
  }
  

  free(input);
  input = NULL;


  return 0;
}
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

14

17.11.2009, 16:54

wie lautet denn die genaue aufgabenstellung?
"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

15

17.11.2009, 16:59

naja wir sollen einen text einlesen und dan bestimmte zeichen durch andere ersetzen.

ein kollege hat mir inzwischen erklärt woran es lag.
und zwar wird die schleife deshalb weiter geführt, weil ich was schreibe wie zb "a" und auf enter drücke. dadurch hat getchar() 2 zeichen im buffer.. das "a" und "return". dadurch wird das 2mal ausgeführt und wir haben des salat ^^

hab das problem inzwischen gelöst und ne neue frage:

gibts in c sowas ähnliches wie strcpy() was ich verwenden kann um in einer kette von chars eben zeichen zu ersetzen?

mfg
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

17.11.2009, 17:12

Zitat von »"$nooc"«

gibts in c sowas ähnliches wie strcpy() was ich verwenden kann um in einer kette von chars eben zeichen zu ersetzen?


In der Standardlibrary nicht, aber das ist doch trivial selber zu schreiben!?

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

17

17.11.2009, 18:40

ich bin eben bequem ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

18

17.11.2009, 20:27

leute sorry, ich hab da ein anderes problem aber will keinen neuen thread deswegen machen..

und zwar will ich einen pointer einer funktion übergeben die einen pointer-pointer als parameter hat. ich denke code sagt mehr als worte:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void shiftLetters(int const replace_from, int const steps, char **char_string) {

  int counter = 0;

  *char_string = realloc(*char_string, sizeof(char) * (lenstr(*char_string) + steps));

  for(counter = lenstr(*char_string) + steps; counter > replace_from + steps; counter--) {

       // um das hier gehts..

    char_string[counter] = char_string[counter - steps];

  }

  printf(*char_string);

}


bei dieser zuweisung passiert nichts, ist mir klar, aber ich weiß nicht wie ich das richtig anschreibe, damit der inhalt sich dementrsprechend verändert. ich will lediglich den hinhalt auf den neuen speicher sozusagen nach "rechts" verschieben, ab einer bestimmten position .. zBwie hier ab der zahl 6

123456xx zu 12345656
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

19

17.11.2009, 21:24

sorry leute, dass ich da dazwischen funke ^^
aber könnt ihr mir da noch kurz helfen?

:D ich weiß wenn ich nicht nochmal frag dann verliert sich meine frage +g+


leute sorry, ich hab da ein anderes problem aber will keinen neuen thread deswegen machen..

und zwar will ich einen pointer einer funktion übergeben die einen pointer-pointer als parameter hat. ich denke code sagt mehr als worte:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void shiftLetters(int const replace_from, int const steps, char **char_string) {

  int counter = 0;

  *char_string = realloc(*char_string, sizeof(char) * (lenstr(*char_string) + steps));

  for(counter = lenstr(*char_string) + steps; counter > replace_from + steps; counter--) {

       // um das hier gehts..

    char_string[counter] = char_string[counter - steps];

  }

  printf(*char_string);

}


bei dieser zuweisung passiert nichts, ist mir klar, aber ich weiß nicht wie ich das richtig anschreibe, damit der inhalt sich dementrsprechend verändert. ich will lediglich den hinhalt auf den neuen speicher sozusagen nach "rechts" verschieben, ab einer bestimmten position .. zBwie hier ab der zahl 6

123456xx zu 12345656
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

carli

unregistriert

20

17.11.2009, 21:33

...wobei man die Aufrufkonventionen in beiden Sprachen auswählen kann.

@Objekte per Referenz:
Man nutzt in Pascal u.a. die Prefixe var, const, in und out, um die Funktion von Parametern besser zu beschreiben und der Compiler sieht von selbst, ob ein const in Daten oder als Referenz übergeben werden muss.

Werbeanzeige