Помещая 2D-массив в структуру, не знаю с чего начать - PullRequest
0 голосов
/ 25 декабря 2011

Я довольно новичок в форумах, так что я надеюсь, что я не испорчу. У меня есть программа, которая читает из файла, пока он помещает файл в массив двумерных символов. Теперь мне нужно strtok 2D «строка» и поместить каждую часть в структуру

вот код

struct processes                 
{ 
    char processNumber[20]; 
    int quanta; 
    int priority; 
}process; 

и

   int readSave(int argc, char ** argv)
{
int i,j,k,count;
size_t blocksize = 16;
char originalFile[256], newFile[1000][20];
int fileDes;
ssize_t status;
unsigned char buffer[blocksize];


strcpy(originalFile, argv[1]);

fileDes = open(originalFile, O_RDONLY); // open for reading

i=0;
status = 99;
while(status > 0 )  // while no error
{
    status = read(fileDes, buffer, blocksize);
    strcpy(newFile[i],buffer); //line 71

    for(k = 0; k <= blocksize; k++)
    {
        buffer[k] = 0;
    }
    i++;

    if(status < 0)
    {
        printf("\nERROR\n");
        exit(6);
    }   
}

//remove later
for(j = 0; j < i; j++) // prints out string to make sure it was input properly
{
    printf("%s", newFile[j]);
}

printf("\n");
close(fileDes);

//Don't know how to carry on

}

Я надеюсь, что вы можете помочь, потому что я потерян РЕДАКТИРОВАТЬ структура processStruct процессов [7000]; while (newFile! = NULL) { strcpy (обрабатывает [количество] .processNumber, strtok (newFile [количество], "\ n")); обрабатывает [count] .quanta = atoi (strtok (NULL, "\ n")); процессы [количество] .priority = atoi (strtok (NULL, "\ n"));

    count ++;
}

Я изменил структуру и входные данные, заданные @Igor, но когда я запускаю его, я получаю ошибку сегментации, и когда я компилирую с -Wall, я получаю readtostring.c: в функции «readSave»: readtostring.c: 71: 3: предупреждение: цели указателя при передаче аргумента 2 из «strcpy» различаются по подписи [-Wpointer-sign] /usr/include/string.h:128:14: примечание: ожидается, что "const char * restrict ", но аргумент имеет тип "unsigned char *"

1 Ответ

1 голос
/ 25 декабря 2011

Выпуск 1:

Похоже, вы должны сделать strtok(newFile[something], " \n"), а не strtok(newFile, " \n"). И не забывайте делать something++ в каждой итерации.


Выпуск 2:

Вы не можете strcpy до int. Попробуйте вместо:

process[something].quanta = atoi(strtok(NULL, " \n"));
process[something].priority = atoi(strtok(NULL, " \n"));

Выпуск 3:

process является структурой, а не массивом структур, поэтому вы не можете сделать process[something]. Вы хотели создать массив структур: processes process[20];

...