私のスキルをテストするために、いくつかの標準ライブラリ関数の独自のバージョンを作成しようとしています。, の代わりを書きましstrlen()
たstrlength()
:
int strlength(const char *c){
int len = 0;
while (*c != '\0') {
c++;
len++;
}
return len;
}
これにはヌルターミネータが含まれていません。文字列を逆にする関数を作成しようとしています。これ:
char *reverse(const char *s){
char *str = (char *)malloc(sizeof(char) * strlength(s));
int i = 0;
while (i < strlength(s)) {
str[i] = s[(strlength(s) - 1) - i];
i++;
}
str[strlength(s)] = '\0';
return str;
}
のような 32 文字 (null ターミネータを含まない) を除くすべての文字列で機能しますfoofoofoofoofoofoofoofoofoofoofo
。reverse()
関数 while-loopでハングします。他のすべての量の文字については、機能します。なぜこうなった?