结构指针中的字符串数组

时间:2014-10-15 18:28:52

标签: c string pointers struct malloc

我有以下结构:

strcut records
{
    char **lines;
    int count;
}

有一个函数get_pwent(),其相关代码如下:

struct records *passwd = malloc(sizeof(strcut records));
passwd->lines = malloc(sizeof(char *) * MAX_STR_SIZE);

通过一些malloc错误检查(passwd不为空,passwd->lines不为空),它传递给我的parse_file()

parse_file(struct records *record, FILE * in)
{
    int i = 0;

    ... // a while loop
    fgets((*record).lines[i], MAX_STR_SIZE, in); // <-- Segment fault here
    i++;
    ... // end while
}

该文件是/ etc / passwd,我想在该文件的第一行读取并将其存储到struct记录行[i]位置。

我也试过这个:

fgets(record->lines[i], ...) //which also gets a seg fault.

在GDB中parse_file()范围:

(gdb) p record
$1 = {struct records *} 0x602250

如何解决此错误?

2 个答案:

答案 0 :(得分:2)

您错过了分配步骤;对于每个passwd->lines[i],您需要进行另一次分配:

// Allocate space for array of pointers
passwd->lines = malloc( sizeof *passwd->lines * max_number_of_strings );
for ( size_t i = 0; i < max_number_of_strings; i++ )
{
  // Allocate space for each string
  passwd->lines[i] = malloc( sizeof *passwd->lines[i] * max_string_length );
}

答案 1 :(得分:2)

在将数据复制到每行之前,您需要为每行分配内存:

  record->line[i] = malloc(MAX_STR_SIZE+1);    // allocate memory first.
  fgets((*record).lines[i], MAX_STR_SIZE, in); // <-- Segment fault here