Я предполагаю, что вы знаете максимальную длину строки ввода.
Этот здесь, безусловно, сделает работу за вас
static char *getLine( char * const b , size_t bsz ) {
return fgets(b, bsz, stdin) );
}
Но помните fgets также помещает символ '\n'
в конец буфера, так что, возможно, что-то вроде этого
static char *getLine( char * const b , size_t bsz ) {
if( fgets(b, bsz, stdin) ){
/* Optional code to strip NextLine */
size_t size = strlen(b);
if( size > 0 && b[size-1] == '\n' ) {
b[--size] = '\0';
}
/* End of Optional Code */
return b;
}
return NULL;
}
, и ваш код нужно немного изменить при вызове getline
#define BUF_SIZE 256
char line[BUF_SIZE];
for(int i = 0; i < 10; i++){
if( getLine(line, BUF_SIZE ) ) {
fprintf(stdout, "line : '%s'\n", line);
}
}
Теперь вполне возможно создать такую функцию, как
char *getLine();
, но тогда необходимо определить поведение этой функции, например, если функция getLine()
выделяет память динамически, тогда вы, вероятно,необходимо использовать free
для отмены выделения указателя, возвращаемого getLine()
, и в этом случае функция может выглядеть как
char *getLine( size_t bsz ) {
char *b = malloc( bsz );
if( b && fgets(b, bsz, stdin) ){
return b;
}
return NULL;
}
в зависимости от того, насколько маленькой является ваша функция, которую вы можете развлекатьмысли о том, чтобы сделать это inline
возможно, это немного не по теме.