LINUX.ORG.RU

Как очистить указатель на char в Си?


0

0

Помогите ламеру, пожалуйста :)

У меня есть функция, funcrion(FILE *in, char *result) пишушая некую последовательность символов в строку result. Однако, чтобы каждый раз записывать новую последовательность, необходимо внутри функции очистить строку result перед тем, как писать в неё что-либо, дабы не появлялись лишние символы (например, при первом вызове было записано "123456", а при втором нужно записать "abc". Если не очищать, получается второй раз "abc456").

Как это сделать, подскажите, пожалуйста!

Заранее спасибо.

anonymous

ужас .. почитай C туториал перед тем как что-то писать ..

записывай '\0' последним символом, с точки зрения C строка это набор символов с '\0' на конце

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

Дело в том, что я пишу строку посимвольно, и когда в первый раз символов больше, чем во второй, у меня остаётся в строке остаток первой.

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

anonymous (*) (16.01.2005 21:44:23):

> когда в первый раз символов больше, чем во второй, у меня остаётся в строке остаток первой.

Попробуй еще раз прочитать то, что тебе ответил lg. Он прямо ответил на то, что надо делать, "...когда в первый раз символов больше, чем во второй...".

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

Народ, ну извините, я же прямо сказал, что я ламер :) Не заработало... Видимо, проблема где-то ещё. Всем спасибо, буду разбираться, читать мануалы, и быть вежливым при встрече с линуксоидами =)

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

Не надо извиняться. Лучше просто почитай что такой стока в С, и что такой указатели.

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

anonymous (*) (16.01.2005 22:00:22):

> Не заработало... Видимо, проблема где-то ещё.

"Этого не может быть, потому что не может быть никогда"

Ок, чтобы "очистить" строку result, напиши такой оператор:

*result='\0';

В ТОЧНОСТИ, включая '*'.

И почитай хоть что-нибудь про Си. Твой вопрос из разряда "А куда лошадь запрягают?":-)

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

Вот и мне казалось, что не может, потому что именно так я и пытался с самого начала сделать, но не получилось :)

В общем, всё равно не получается :( Может, у меня что-то другое в функции криво написано? Вот такая функция, должна брать символы, разделённые пустыми символами, или вертикальной чертой:

int read_next_charzv_from_file (FILE *in, char *result){ int i, c; i = 0; *result = '\0'; if (feof(in)) return 1; while (isspace(c = fgetc (in))); if (c != '|') ungetc (c,in); while ((c = fgetc(in)) != '|' && !feof(in) && !isspace(c)){ result[i] = c; i++; } return 0; }

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

Тьфу ты... вот так более понятно:

int read_next_charzv_from_file (FILE *in, char *result){

int i, c;

i = 0;

*result = '\0';

if (feof(in)) return 1;

while (isspace(c = fgetc (in)));

if (c != '|') ungetc (c,in);

while ((c = fgetc(in)) != '|' && !feof(in) && !isspace(c)){

result[i] = c;

i++;

}

return 0;

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

int read_next_charzv_from_file (FILE *in, char *result){

int i, c;

i = 0;

*result = '\0';

if (feof(in)) return 1;

while (isspace(c = fgetc (in)));

if (c != '|') ungetc (c,in);

while ((c = fgetc(in)) != '|' && !feof(in) && !isspace(c)){

result[i] = c;

i++;

}
/*добавь*/
result[i] ='\0';

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

Ооо, отлично, спасибо! Я пробовал и то и то, но отдельно... Сейчас догнал, почему не работало! Спасибо всем, кто помогал, тему можно считать закрытой :)

anonymous
()

Разработка анекдотов в самом разгаре...

anonymous
()

Кернигана/Ритчи почитай, братан!

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