когда вы вызываете strlen
, он ищет символ '\0'
, чтобы завершить строку.У вас нет этого символа внутри вашей строки, поэтому поведение strlen
непредсказуемо.Ваша append
функция действительно хороша.Кроме того, незначительная вещь, вам нужно добавить return 0;
в вашу основную функцию.И i
должен начинаться с 1 вместо 0, вот как это должно выглядеть:
int main(void){
char *s;
size_t i = 1;
s = malloc (i * sizeof(char));//Just for fun. The i is not needed.
if(s == NULL) {
fprintf(stderr, "Coul'd not allocate enough memory");
return 1;
}
s[0] = '\0';
for(char c = getchar(); c != '\n' && c != EOF; c = getchar()) {//it is not needed in this case to store the result as an int.
i++;
s = realloc (s,i * sizeof(char) );
if(s == NULL) {
fprintf(stderr, "Coul'd not allocate enough memory");
return 1;
}
append (s,c);
}
printf("%s\n",s);
return 0;
}
Спасибо за комментарии, которые помогли мне улучшить код (и мой английский).Я не идеален:)