Я написал программу для подсчета строк ввода, заданного stdin:
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#define BUFF_SIZE 8192
#define RS '\n'
int
main(int argc, char **argv)
{
char buff[BUFF_SIZE];
ssize_t n;
char *r;
int c = 0;
readchunk:
n = read(0, buff, BUFF_SIZE);
if (n<=0) goto end; // EOF
r=buff;
searchrs:
r = memchr(r, RS, n);
if(r!=NULL) {
c++;
if((r-buff)<n) {
++r;
goto searchrs;
}
}
goto readchunk;
end:
printf("%d\n", ++c);
return 0;
}
Я скомпилировал его с помощью gcc, без параметров.
При запуске он дает нестабильный результат, а недалеко от истины, но ложно.Иногда это segfaults.Чем больше размер буфера, тем чаще он выходит из строя.
Что я делаю не так?