Я использую функцию getline
для чтения строки из STDIN
.
Прототипом getline
является:
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
Я использую это как тестовую программу, которая получается из http://www.crasseux.com/books/ctutorial/getline.html#getline
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int atgc, char *argv[])
{
int bytes_read = 1;
int nbytes = 10;
char *my_string;
my_string = (char *)malloc(nbytes+1);
puts("Please enter a line of text");
bytes_read = getline(&my_string, &nbytes, stdin);
if (bytes_read == -1)
{
puts ("ERROR!");
}
else
{
puts ("You typed:");
puts (my_string);
}
return 0;
}
Это отлично работает.
Мои сомнения?
-
Зачем использовать
char **lineptr
вместоchar *lineptr
как параметр функцииgetline
? -
Почему это неправильно, когда я использую следующий код:
char **my_string; bytes_read = getline(my_string, &nbytes, stdin);
-
Меня путают с
*
и&
.
Вот часть предупреждений:
testGetline.c: In function ‘main’:
testGetline.c:34: warning: pointer targets in passing argument 2 of
‘getline’ differ in signedness
/usr/include/stdio.h:671:
note: expected ‘size_t * __restrict__’ but argument is of type ‘int *’
testGetline.c:40: warning: passing argument 1 of ‘putchar’ makes integer
from pointer without a cast
/usr/include/stdio.h:582: note: expected ‘int’ but argument is of
type ‘char *’
Я использую GCC версии 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5).