LINUX.ORG.RU

Интересно!


0

0

#include <stdio.h>

int
main( void )
{
FILE *f = fopen("./cppmain.c", "r");

unsigned char *start;
unsigned char *buf = (unsigned char*) new (unsigned char) [4095];

start = buf;

while( !feof(f) )
{
unsigned char c = fgetc(f);

if ( c != '\r' && c != '\n' )
*buf++ = c;
else
{
*buf = '\0';
printf( "buf: %s\n", buf );
buf = start;
}
}

fclose(f);
return 0;
}

printf( "buf: %s\n", buf );

Как вы думаете что выдаст эта строка?

gcc-3.2.3
g++ -g2 in.c -o out


Ответ на: комментарий от skydion

Нет ну buf: ода выведет, а почему больше нифига не выводит? Там должны еще даные выводится...

skydion
() автор топика

>*buf++ = c;

в каком порядке выполняются * и ++? Если по порядку, то надо
*(buf++) = c;

CyberCoder
()

потому что buf всегда на конец строки указывает, почему же еще?

Murr ★★
()

Грубо говоря, последовательность

*buf = '\0';
printf( "buf: %s\n", buf );

всегда выводит в точности одну и ту же строку независимо от контекста.

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

Точно. А *buf++ сначала записывается значение, а потом изменяется адрес, как и надо.

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