- Registriert
- 15.02.09
- Beiträge
- 455
Hallo,
Wir haben die Aufgabe eine Zeichenkette in die andere zu kopieren, wenn sie reinpasst, und dieses Funktion soll dann die neue Länge zurückliefern. So weit so gut, habe ich auch hinbekommen, ABER: Eine Sache verstehe ich nicht. Und zwar: Ich habe nachdem ich die zweite Zeichenkette in die erste geschrieben habe zuerst kein Nullbyte mehr angehangen. Danach wird aber meine Funktion aufgerufen, die dann abbricht, wenn ein Nullbyte da steht.
Das funktioniert aber trotzdem und ich weiß nicht wirklich warum. Einzige Erklärung die ich noch habe: Zufall, dass halt genau da ein Nullbyte ist, aber das kann es ja irgendwie auch nicht sein.
Hier mal mein Code:
Wenn ich halt die viertletzte Zeile (fett markiert) weglasse, geht das immer noch, und das verstehe ich eben nicht.
Noch zur Erklärung, der Funktion werden zwei Strings, b1 und b2, übergeben, und bl1 enthält die Größe des Feldes b1.
Vielleicht kann mir das jemand erklären. Wäre sehr dankbar...
Wir haben die Aufgabe eine Zeichenkette in die andere zu kopieren, wenn sie reinpasst, und dieses Funktion soll dann die neue Länge zurückliefern. So weit so gut, habe ich auch hinbekommen, ABER: Eine Sache verstehe ich nicht. Und zwar: Ich habe nachdem ich die zweite Zeichenkette in die erste geschrieben habe zuerst kein Nullbyte mehr angehangen. Danach wird aber meine Funktion aufgerufen, die dann abbricht, wenn ein Nullbyte da steht.
Das funktioniert aber trotzdem und ich weiß nicht wirklich warum. Einzige Erklärung die ich noch habe: Zufall, dass halt genau da ein Nullbyte ist, aber das kann es ja irgendwie auch nicht sein.
Hier mal mein Code:
Code:
#include "strop3.h"
#include "assert.h"
int length(char str[]){
int i=0;
while (str[i]!='\0'){
i++;
}
return i;
}
/* if |b1|+|b2| < bl1
appends the character sequence stored in b2 to that contained in buffer b1
returns |b1|+|b2|
otherwise
b1 remains unchanged
returns -1
*/
int concat(char *b1, int bl1, char *b2){
//essential to avoid a Segmentation fault, if b1 is longer than bl1
assert(length(b1)<bl1);
int i=0;
int l1=0;
int l2=0;
l1=length(b1);
l2=length(b2);
if ((l1+l2)>bl1){
return -1;
}
else {
while (b2[i]!='\0'){
b1[l1+i]=b2[i];
i++;
}
[B]b1[l1+i]='\0';[/B]
return length(b1);
}
}
Wenn ich halt die viertletzte Zeile (fett markiert) weglasse, geht das immer noch, und das verstehe ich eben nicht.
Noch zur Erklärung, der Funktion werden zwei Strings, b1 und b2, übergeben, und bl1 enthält die Größe des Feldes b1.
Vielleicht kann mir das jemand erklären. Wäre sehr dankbar...