buff
needs to be null-terminated.scanf("%d", &n);
keeps the newline.The buffer is not secured when only a newline is entered.
example to fix
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *readline(FILE *f){
char *buff=NULL,*newbuff=NULL;
int c;
int buf_sz=512,len=0;
buff=malloc(buf_sz);
if(!buff) return NULL;
while(EOF != (c=fgetc(f)) && c != '\n'){
if(len == buf_sz -1){
buf_sz*=2;
newbuff=realloc(buff,buf_sz);
if(newbuff==NULL){
free(buff);
return NULL;
}
buff=newbuff;
}
buff[len++]=c;
}
buff[len]='\0';
return buff;
}
int main(){
char *s;
int n, l;
scanf("%d%*c",&n);
while(n--){
s=readline(stdin);//check return value
l=strlen(s);
printf("%d\n", l);
free(s);
}
return 0;
}