Pourquoi est le premier argument de getline un pointeur de pointeur de char**” au lieu de “char*”?

- Je utiliser getline fonction pour lire une ligne de STDIN.

Le prototype de getline est:

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

Je l'utiliser comme un programme de test qui obtenir de 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;
}

Cela fonctionne bien.

Mes doutes sont?

  1. Pourquoi utiliser char **lineptr au lieu char *lineptr en tant que paramètre de la fonction getline?

  2. Pourquoi c'est mal quand j'utilise le code suivant:

    char **my_string;
    bytes_read = getline(my_string, &nbytes, stdin); 
  3. Je suis confus avec * et &.

Ici une partie de avertissements:

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 *’

J'utilise GCC version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5).

  • BTW, vous faute de frappe, la déclaration de bytes_read. Et ce qui sur terre est "l'incertitude"?
  • Désolé, j'ai corrigé.
  • J'utilise "l'incertitude" qui signifie "l'puzzles, de l'incompréhension des parties". Désolé.
InformationsquelleAutor ct586 | 2011-04-21