Чтение из буфера и сохранение строки в массиве - PullRequest
0 голосов
/ 10 сентября 2011

Я пытаюсь сделать простой клиент и сервер. Прямо сейчас я могу распечатать содержимое файла на экран. Теперь я хотел бы сохранить каждую строку, которую я прочитал из буфера, в массив. Я пытался это сделать, но по какой-то причине он всегда добавляет последнюю строку, полученную из буфера Кто-нибудь может указать, где я ошибся

int getFile (char path[256], int fd)
{
    char buffer[256];
    char bufferCopy[256];
    char arguments[1000][1000];
    int total = 0;
    char * ptr;

    while(read(fd, buffer, 256) != NULL)
    {
        char * temp; 

        strcpy(arguments[total], buffer);
        total++;


    }
    for(int i = 0; i < total; i++)
    {

        printf("\n %s", arguments[i]);


    }



}

1 Ответ

2 голосов
/ 10 сентября 2011

Ваш read вызов не читает строки, он читает до 256 байтов из fd. read также ничего не знает о нулевых терминаторах, поэтому нет гарантии, что buffer будет содержать строку (т. Е. Есть нулевой терминатор) и, следовательно, нет гарантии, что strcpy прекратит копирование в разумном месте. Вы почти наверняка пишете по всему стеку, и как только вы это сделаете, все ставки сняты, и вы не можете ожидать, что произойдет что-то разумное.

Если вы хотите читать строки, вы можете переключиться на fgets или продолжать использовать read и выяснить, где находятся EOLs.

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