substr - funktion
-
Hallo,
ich schreibe momentan meine eigene substr Funktion.
Prototype:
int substr(char* substr, int from, int length)
substr = Zeiger auf ein Char-Array
from = vom wievielten element length "genommen" wird ...
length = anzahl der elemente... und in ein neues array gespeichert wird.
Irgendwie ist die Testausgabe in meinem Code fehlerhaft.
Testausgabe:
for (i = 0; i != length; i++) { printf("%c", new_array[0]); printf("%c", new_array[1]); printf("%c", new_array[2]); printf("%c", new_array[3]); printf("%c", new_array[4]); printf("%c", new_array[5]); }
und hier mein code:
#include <stdio.h> int main(void) { char string[20]; int i; for (i = 0; i != 20; i++) { string[i] = 'a' + i; } for (i = 0; i != 20; i++) { printf("%c", string[i]); } substr(string, 3, 10); } int substr(char* substr, int from, int length) { int a; int i; char new_array[length]; for(a = from; a != from + length; a++) { new_array[a] = substr[a]; printf("new_array: %d = substr: %d || %c = %c\n", a, a, new_array[a], substr[a]); } for (i = 0; i != length; i++) { printf("%c", new_array[0]); printf("%c", new_array[1]); printf("%c", new_array[2]); printf("%c", new_array[3]); printf("%c", new_array[4]); printf("%c", new_array[5]); } }
-
sorry
die for schleife in der testausgabe ist quatsch!aber dennoch erhalte ich mit folgender testausgabe des neuen arrays:
printf("%c", new_array[0]); printf("%c", new_array[1]); printf("%c", new_array[2]); printf("%c", new_array[3]); printf("%c", new_array[4]); printf("%c", new_array[5]);
folgende ausgabe:
2def
-
Hallo,
dein Problem liegt hier:
new_array[a] = substr[a];
Du setzt 'a' auf 'from' welches in deinem Beispiel dem Wert 3 entspricht.
Du faengst hier erst beim 4ten Element an, an 'new_array' zuzuweisen, d. h.
im Bereich von 'new_array[0...2]' stehen undefinierte Werte (zufaellige).
Ausserdem muesstest du 'new_array[length]' noch auf '\0' setzen.Hoffe ich konnte dir helfen.
[edit]
Deine substr-Funktion haettest du auch mittels 'memcpy' implementieren koennen:memcpy(new_array,substr+from,length);
Und dann musste natuerlich 'new_array[length+1]' auf '\0' setzen.
[/edit]mfg
v R