LINUX.ORG.RU

Странный вопрос...
char *str;
...
if(fgets(str,...)!=NULL)...
...
Варианты:

1.str[strlen(str)-1]='\0';

2.
{
   char *ptr=str;
      for(;*ptr!='\0';ptr++)if(*ptr=='\n'){
         *ptr='\0';break;
      }
}

3.
{
   char *ptr=str;
      for(;*ptr!='\n';ptr++);
      *ptr='\0';
}
И т.д. и т.п.

Die-Hard ★★★★★
()

2Die-Hard: Огромное спасибо! Воспользовался первым примером, работает чудесно... большое спасибо, очень долго ч этим мучился.

roy ★★★★★
() автор топика
Ответ на: комментарий от anonymous

anonymous (*) (2003-02-25 01:48:00.737):
> И вполне доволен.
Скорее всего, просто пока везет :)

1. strtok использует статич. буфер. Она не реентрабельна, не thread safe.
2. Если ты подсунешь ей "\n", то она, вместо "", вернет NULL, а с str
ничего не сделает, т.е. просто оставит "\n"

Вообще, она - для другого.

Die-Hard ★★★★★
()

И неправильно. Он отрезает _любой_ последний символ. Которые не обязательно есть '\n'. Корректнее было бы проверить.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

DonkeyHot (*) (2003-02-25 17:20:01.637):
> И неправильно.
Что?

> Он отрезает _любой_ последний символ.
Кто?

> Которые не обязательно есть '\n'.
Эт-та ты об чем?

> Корректнее было бы проверить.
Кого?

Die-Hard ★★★★★
()

2roy (*) (2003-02-24 19:07:14.861):
Дошло. что хотел сказать DonkeyHot (*) (2003-02-25 17:20:01.637) -
на subj посмотрел.

Он прав. Из перечисленного мной можно юзать только 2.
{
   char *ptr=str;
      for(;*ptr!='\0';ptr++)if(*ptr=='\n'){
         *ptr='\0';break;
      }
}

Остальное может сглючить, если stdin не присоединен к tty.
E.g.:
echo -n "1234" |theproga

Вариант 1 вернет 123,  вариант 3 слетит по segv.

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.