использование getdelim - PullRequest
       2

использование getdelim

0 голосов
/ 14 июня 2011
#include<stdio.h>
#include<stdlib.h>
main()
{
FILE *fp;
char *lineptr = NULL;
size_t len;
size_t read;
fp = fopen("test.txt","r");
if(NULL == fp)
{
exit(1);
}
while((read=getdelim(&lineptr,&len,33,fp))!= -1)
{
    printf("%s",lineptr);
}
free(lineptr);
}

в test.txt я написал

before giving tab !after tab has been given

я установил!как разделитель, но я не вижу никакой разницы между getline и getdelim в getdelim. Я могу установить разделитель, но в случае getline это символ новой строки, я хочу, чтобы o / p было

 before giving tab
 after tab has been given

!должен быть принят в качестве разделителя, как я могу сделать это, используя getdelim

Ответы [ 5 ]

5 голосов
/ 14 июня 2011

Это не проверено, но попробуйте изменить строку printf, чтобы вы могли увидеть разницу:

printf("%s\n",lineptr);
3 голосов
/ 14 июня 2011

Он делает именно то, что вы думаете, просто первая строка, которую он печатает,

before giving tab !

без новой строки, затем after tab has been given

измените ваш отпечаток на

printf("%s\n",lineptr);
1 голос
/ 14 июня 2011

Работает отлично (с разделителем '!', Как вы и просили); единственная проблема заключается в том, что вы распечатываете отдельные строки в точности так, как они поступают, в цикле while.

Помните: getdelim включает в строку разделитель (он не удалит «!» Для вас).

Для данного тестового примера первый раз вокруг цикла даст строку "before giving tab !", а второй раз вокруг цикла даст строку "after tab has been given". Вы печатаете их оба без каких-либо новых строк или чего-либо еще, поэтому ваш вывод выглядит так же, как и ввод. Я предлагаю вам печатать новую строку после каждой строки, но это не избавит от «!». Поэтому вы можете изменить свой код печати на:

while((read=getdelim(&lineptr,&len,33,fp))!= -1)
{
    if (lineptr[strlen(lineptr)-1] == '!')
        lineptr[strlen(lineptr)-1] = '\0';
    printf("%s\n",lineptr);
}
0 голосов
/ 20 июля 2013

См. man getdelim.Разделитель включается в строку, за ним следует нулевой символ.Если вы хотите напечатать строку, за которой следует EOL, пут - самый быстрый способ.

puts(lineptr);

Если вы также хотите удалить разделитель '!', Добавьте это перед путами.

lineptr[read - 1] = 0;
0 голосов
/ 14 июня 2011
char before[256], after[256];

fscanf(fp, "%255[^!]!%255[^\n]", before, after);
printf("%s\n%s", before, after);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...