【发布时间】:2018-09-25 22:34:11
【问题描述】:
我写了一个程序来计算标准输入给出的输入行数:
#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 编译的,没有任何选项。
运行时,它给出的结果不稳定,与事实相差不远,但结果却是错误的。有时它会出现段错误。缓冲区大小越大,段错误就越频繁。
我做错了什么?
【问题讨论】:
-
你应该开始放弃滥用
goto。
标签: c gcc segmentation-fault