2011-02-05 3 views
1

Идея состоит в том, чтобы читать строки со стандартного ввода до тех пор, пока не будет достигнута EOF (в этом формате "string - string"). Затем разделите строку на две строки и сохраните их в 2d-массиве. Массив динамически выделяется изначально 2 строками и 20 столбцами, но я хотел бы добавить 2 дополнительных строки каждый раз, когда я хочу добавить к нему следующие строки (функция). Вот мой код:C сохранение строк в 2-й массив

char ** alloc(int rows, int collums) { 
    char ** mat; 
    int i; 
    mat = malloc(sizeof (char *) * rows); 
    for (i = 0; i < rows; i++) { 
     mat[i] = malloc(sizeof (char) * collums); 
    } 
    return mat; 
} 

char ** addtoarray(char ** mat, char * string1, char * string2, int position) { 

    sscanf(string1, "%s", mat[positon]); 
    sscanf(string2, "%s", mat[positon+1]); 
    return mat; 
} 

char ** getinput(char * longstring, char * string1, char * string2) { 

    int position = 0, n = 2, max = 30; 
    char ** mat; 
    mat = alloc(n, max); 
    while (fgets(longstring, max, stdin)) { 
     sscanf(longstring, "%s - %s", string1, string2); 
     addtoarray(mat, string1, string2, positon); 
     n += 2; 
     position += 2; 
     mat = expandmat(mat, n); 
    } 

    return mat; 
} 

Кроме того, если есть что-то в этом коде, который не делает никакого смысла, не могли бы вы сказать мне, как это исправить?

Я знаю, что это кажется тривиальной задачей, но это сводило меня с ума.

Благодарим за помощь.

+0

Прости меня за этот комментарий, но это именно причина, почему я предпочитаю более высокий уровень сестры-языки, такие как Java или C# более простого C. Это так легко писать в HLL. (Спасибо библиотекам.) –

ответ

0

Проверьте функцию realloc C для изменения размера коврика.

expandmat должен перераспределить коврик, так что вы можете добавить еще две строки (она должна возвращать матрицу, а также, потому что перераспределить будет копировать память на новое место, если это необходимо)

+0

Да, я попробовал realloc, но я не могу понять, как именно он работает. – boone

+0

У меня была функция вроде этого, но продолжала получать segfault..' mat = realloc (mat, newrows * sizeof (* mat)); ' – boone

0

Ого ... В третий раз, что вопрос вроде этого подходит сегодня :-).

Пожалуйста, проверьте мой ответ здесь поможет вам: Array of C structs