2015-12-06 1 views
-3

Я хочу создать массив строк, в которых у меня нет фиксированной длины для каждой строки. Как мне это сделать? Это мой код:Как создать динамический массив строк в C?

char **a; 
int n, m; 
scanf_s("%d %d", &n, &m); 
a = (char**)malloc(n*sizeof(char*)); 
for (int i = 0; i < n; i++) 
    a[i] = (char*)malloc(m*sizeof(char)); 

for (int i = 0; i < n; i++) 
    for (int j = 0; j < m;j++) 
    scanf_s(" %c", &a[i][j]) 

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

+0

'malloc' a' char ** ', а затем' malloc' пространство, необходимое для каждой из строк, сохраняя указатель на них в соответствующих индексах массив, созданный первым «malloc». –

+0

Я сделал это уже, но хочу вводить слова o differet lenght. –

+2

Что вы сделали до сих пор, где вы застряли? Покажите свой код. – Olaf

ответ

1

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

Является ли длина массива фиксированной? Если да:

char *charPtr[5]; // Can refer to 5 different strings of different length each 
for(int i = 0; i<5; i++) 
{ 
charPtr[i] = malloc(SOME_DYNAMICLEN); // can specify different length for each string 
strcpy(charPtr[i], "test"); // initialize i-th string 
} 

не забудьте free каждую строку позже.

1

Пример того, что говорит @Daniel является:

int NumStrings = 100; 
char **strings = (char**) malloc(sizeof(char*) * NumStrings); 
for(int i = 0; i < NumStrings; i++) 
{ 
    /* 
     Just an example of how every string may have different memory allocated. 
     Note that sizeof(char) is normally 1 byte, but it's better to let it there */ 
    strings[i] = (char*) malloc(sizeof(char) * i * 10); 
} 

Если вам не нужно malloc каждой строки в начале, вы можете сделать это позже. Если вам нужно изменить количество выделенных строк (сделайте realloc до strings), то это может быть немного сложнее.

+0

'char strings = malloc (...)' -> 'char **' – szczurcio

+0

Это просто пример. Может быть, что-то меньшее для вас лучше? (отредактирован ответ) – emi

+0

Вы также можете сделать явный тип-тип (отредактирован снова ...) – emi

-2

Выделить массив строк char ** mystrs = malloc (numstrings * sizeof (char *)). Теперь mystrs - это массив указателей. Теперь все, что вам нужно сделать, это использовать malloc для каждой строки, которую вы хотите добавить.

mystrs [0] = malloc (numchars +1 * sizeof (char)). // добавление дополнительного символа для нулевого символа

Затем вы можете скопировать данные строки с помощью strcpy. strcpy (mystrs [0], "my string")