C Interview Questions and Answers


What is a good data structure to use for storing lines of text?

What's a good data structure to use for storing lines of text? I started to
use fixed-size arrays of arrays of char, but they're just too restrictive.

One good way of doing this is with a pointer (simulating an array) to a set of pointers
(each simulating an array) of char. This data structure is sometimes called a ``ragged
array,'' and looks something like this:


You could set up the tiny array in the figure above with these simple declarations:

char *a[4] = {"this", "is", "a", "test"};

char **p = a;

(where p is the pointer-to-pointer-to-char and a is an intermediate array used to
allocate the four pointers-to-char).

To really do dynamic allocation, you'd of course have to call malloc:

#include <stdlib.h>

char **p = malloc(4 * sizeof(char *));

if(p != NULL) {

p[0] = malloc(5);

p[1] = malloc(3);

p[2] = malloc(2);

p[3] = malloc(5);

if(p[0] && p[1] && p[2] && p[3]) {

strcpy(p[0], "this");

strcpy(p[1], "is");

strcpy(p[2], "a");

strcpy(p[3], "test");



(Some libraries have a strdup function which would streamline the inner malloc and
strcpy calls. It's not Standard, but it's obviously trivial to implement
something like it.)

Here is a code fragment which reads an entire file into memory, using the same kind
of ragged array.

#include <stdio.h>

#include <stdlib.h>

extern char *agetline(FILE *);

FILE *ifp;

Posted by:Richards