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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

31

18.11.2009, 00:36

Zitat von »"_Tom_"«

Aber als ich SEP/ESP gemacht habe hab ich einen anderen Tutor gehabt :p


Hah! Ich weis auch wen ;)

32

18.11.2009, 09:22

jaja SEP war auch so was schönes. (habs vor esp gmacht) habs letzes semester gmacht...
ich muss sagen mich würds wirkli interessieren wer ihr seid.
Whs seh i euch andauernd im Lernzentrum...

lg

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

33

18.11.2009, 16:37

so.. also.. ich hab da noch immer ein problem.. also meine funktion sieht so aus:

C-/C++-Quelltext

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

  int act_size = sizeof(char) * lenstr(char_string),
    counter = 0;

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

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

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

  }

    // funktioniert ganz normal

  printf("...    %s     ...", char_string);

}


aber wenn mein programm wieder rausgeht aus der funktion ist mein pointer dem ich der funktion übergeben habe mit müll gefüllt..

so übergebe ich der funktion den parameter:

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
int main() {

  char *output = getInput();
  orig_strlen = lenstr(output);


  printf("Array: %s\n", output);


  modifyString(output); // hier gehts los

  // ...

}

void modifyString(char *char_string) {

  int changes, index, remember_pos;
  char at[5]= "[at]\0";

  changes = index = remember_pos = 0;


  for(index = 0; char_string[index] != '\0'; index++) {

    switch(char_string[index]) {

      case '@': 

        shiftString(char_string, index, 4);

  // ...

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

34

18.11.2009, 16:48

so, ich weiß jetzt net genau was "steps" bei dir is aber ich denk dass die for, dir dir deine zeichen nach hinten schiebt falsch is... oder irre ich mich.

ich würd das so machen :
for(counter = gesammte_länge; counter > gefundenes_zeichen; counter--)
{
char_string[counter+anzahl_der_verschiebungen] = char_string[counter];
}

und außerdem seh ich nicht ganz woher du den "char_string" herbekommst.
weil in da main machst ja einen pointer output, in den du die zeichen einliest.

lg

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

35

18.11.2009, 17:16

omg.. ich packs nit.. kann mir jemand sagen was ich da falsch mache..

das mit dem string verändern klappt jetzt, aber jetzt schmeißt mir visual studio einen error wenn ich free(output); ausführe und gcc schreibt mir gleich mal 2 seiten nur errors...

HILFEEEEE !! :cry:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
int main() {

  int orig_strlen = 0, 
      mod_strlen  = 0, 
      mod_chars   = 0;

  char *output = getInput();
  orig_strlen = lenstr(output);



  printf("Array: %s\n", output);
  printf("\n----------\n");

  output = modifyString(output);

  printf("Array: %s\n", output);
  printf("\n----------\n");
  printf("original string: %d\n", orig_strlen);
  printf("modified string: %d\n", lenstr(output));
  printf("original string: %d\n", mod_chars);
  


  free(output);
  output = NULL;
  
  getchar();
  
  return 0;
}


char *getInput() {

  int chr_counter = 0;
  int act_size    = sizeof(char);
  char *input     = malloc(sizeof(char));
 

  while( ( input[chr_counter] = (char)getchar() )  != EOF) {
    
    input = realloc(input, act_size += sizeof(char));
    chr_counter++;
  }

  input = realloc(input, act_size += sizeof(char));
  input[chr_counter + 1] = '\0';

  return input;
}



char *modifyString(char *char_string) {

  int changes, index, remember_pos;
  char at[5]= "[at]\0";

  changes = index = remember_pos = 0;

  



  for(index = 0; char_string[index] != '\0'; index++) {

    switch(char_string[index]) {

      case '@': 

        char_string = shiftString(char_string, index, 4);
        replaceChar(char_string, index, at);

        changes += 1;
        break;

      case '<':

        changes += 1;
        break;

      case '>':

        changes += 1;
        break;

      case '&':

        changes += 1;
        break;

    };

  }

  return char_string;
}

char *shiftString(char *char_string, int const at_point, int const steps) {

  int act_size = sizeof(char) * lenstr(char_string),
    counter = 0;

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

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

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

  }

  return char_string;

}

void replaceChar(char *char_string, int const at_point, char const *replace) {



}



int lenstr(char const *char_string) {

  int  count=-1;
  while(char_string[++count] != '\0') ;

  return(count);
}



int lenstr(char const *char_string) {

  int  count=-1;
  while(char_string[++count] != '\0') ;

  return(count);
}




int main() {

  int orig_strlen = 0, 
      mod_strlen  = 0, 
      mod_chars   = 0;

  char *output = getInput();
  orig_strlen = lenstr(output);



  printf("Array: %s\n", output);
  printf("\n----------\n");

  modifyString(output);

  printf("Array: %s\n", output);
  printf("\n----------\n");
  printf("original string: %d\n", orig_strlen);
  printf("modified string: %d\n", mod_strlen);
  printf("original string: %d\n", mod_chars);
  


  free(output);
  output = NULL;
  
  getchar();
  
  return 0;
}
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

36

18.11.2009, 17:20

vermutlich schreibst du irgendwo über deinen output hinaus (off by one error!?)

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

37

18.11.2009, 17:26

heap corruption detected ...

der error sagt meine anwendung über speicher geschrieben hat nach dem heap buffer.. aber ich erkenne nicht wo...

übergebe ich eigtl. meine pointer richtig nach realloc() und als rückgabewert der funktionen?

die shiftString()
reserviert zb 4 Byte, und kopiert die zeichen des string nach rechts.. die ausgabe funktioniert so wie ich sie haben will. wie gesagt.. beim free() ist es dann vorbei..
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

38

18.11.2009, 17:35

free(output);
output = NULL;

return 0;

warum weißt du nochmal output NULL zu wenn dus direkt vorher freest?

achja. du musst es aber unbedingt am pluto compilen weil auch wenn VS dann zufreiden ist heißt das net dass auch da pluto das mag...

lg

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

39

18.11.2009, 17:38

ich nulle es weil sinn macht und vorallem weil ich punkte abzug bekomme wenn ichs 'nicht' mach.

jo vs und pluto sind generell sehr unterschiedlicher meinung.. pluto redet was von redefinition der main funktion.. aber der kann mich mal.. mich würds freuen wenn free(output); wenigstens mal unter windows läuft..
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

40

18.11.2009, 18:01

Was ich mich frage wie aus in der main bei modifyString(output); 'output' geändert wird. Überleg dir einmal was denn mit ouput passiert...

Und ob das 'getchar(); ' am Schluss wirklich gefordert ist würde ich mir auch überlegen. Ich kenn zwar die Angabe nicht, bis jetzt war es aber soweit ich das mitbekommen habe noch nie gefordert...

Zitat von »"AlymcGeel"«

Whs seh i euch andauernd im Lernzentrum...

Kann schon sein ;) Nur bei dir weiß ich überhaupt nicht wer du sein könntest :P
Tutorials zu OpenGL, Ubuntu und Programmieren allgemein: www.tomprogs.at

Forum und Wiki zum Programmieren lernen: proggen.org/forum.proggen.org

Werbeanzeige