C Массив строк - PullRequest
       10

C Массив строк

0 голосов
/ 22 мая 2010

Это, возможно, простой вопрос, но я хочу создать двумерный массив и добавить в него строку, как в java

string  str = "text" ; 

string [][] array  = new [][] string ;  

array[i][j] = str ; 

Но в C нет строки. Я пробовал вот так, но здесь strcpy () даетошибка. Возвращается к коду сборки.Я пытаюсь прочитать строку за строкой из текста и разделить строку за пробелом и добавить их в структуру. Но сначала я думаю, что должен добавить каждую строку и строку в массиве, а затем сделать итерацию и добавить в поля структуры.

static const char filename[] = "student.txt";
FILE *file = fopen ( filename, "r" );
char line [ 128 ]; /* or other suitable maximum line size */
char delims [ ]=" ";
char *result =NULL;
char list[15];
char arra[128][128];
int i=0;
int j=0;

struct {
    char gruppa[10];
    char familiya[20];
    int uchaste;
    struct {
        int firsth;
        int second;
        int third;
        int fourht;
        int fifth;
    } exam;
}student;

for(i=0; i<128; i++)
    for(j=0; j<128; j++) 
        arra[i][j] = '\0';

for(i=0; i<15; i++)
    list[i] = '\0';


if ( file != NULL )
{           
    while ( fgets ( line, sizeof line, file ) != NULL ) 
    {
        result = strtok(line,delims);
        while (result !=NULL) {         
            strcpy(list,("%s",result));
                strcpy(arra[i][j],list); // Here it gives errror 
            j++;
            result = strtok(NULL,delims);
        }
        j=0;
        i++;
    }
    fclose ( file );        
}
else
{
    perror ( filename ); 
}
getchar();
return 0;

1 Ответ

4 голосов
/ 22 мая 2010

Строки в C являются массивами char, поэтому ваш char arra[128][128]; указывает массив из 128 строк, каждая длиной до 127 символов + завершающий '\0'. Если вы хотите 128 × 128 строк, вам нужно третье измерение.

Если вы не возражаете выделить фиксированное количество памяти для каждой строки, вы можете просто добавить третье измерение к существующему определению: char array[128][128][max_length_of_string + 1]

(Обратите внимание, что в этом случае вы должны убедиться, что максимальная длина не превышена, C не проверит ее для вас!)

Если вы хотите распределить строки динамически, вы можете сделать элементы char * (т.е. указатели на символы): char *array[128][128], но тогда вы должны malloc память для каждой строки (не забывая о дополнительных char для конечного '\0', что есть в строках C). И free все они, когда вы закончите (если вы просто не выйдете из программы в этот момент).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...