在成功地运行了一个容器之后,我的分离器将不会获得一个应该退出while循环的字符比较。在尝试“0(制表符) 8 (Enter)(ctrl+D)”作为输入后,选项卡被正确地写成空格,但是在rp被增量指向8之后,应该读取8的while循环不会退出,我得到一个seg错误。下面是代码:
#include <string.h>
#include <stdio.h>
#define MAXLINE 100
char doc[9001];
main(int argc, char *argv[])
{
int max = 0;
char *rp = doc;
char *wp = rp;
char *tf = wp;
char *lp = doc;
while ((*(rp++) = getchar()) != EOF);
*--rp = '\0';
rp = doc;
j = 0;
while ( (*rp != '\0') && (argc == 1)) {
if (*rp == '\n') {
lp = rp + 1;
*wp++ = *rp++;
}
while( (*rp != '\t') && (*rp != '\0') && (*rp != '\n') ) { /*this loops after a tab*/
*wp++ = *rp++;
}
if (*rp == '\t') {
rp++;
tf = lp + ((((wp - lp) / 8) + 1) * 8);
while ((tf - wp) != 0)
*wp++ = 's';
}
}
if (*rp == '\0')
*wp = '\0';
printf("%s\n", doc);
}发布于 2013-11-21 04:21:54
我感觉到,下面的循环进入无限循环。
while( (*rp != '\t') && (*rp != '\0') && (*rp != '\n') ) { /*this loops after a tab*/
*wp++ = *rp++;这是因为,您正在检查rp!= '\t'等等,但是这里
if (*rp == '\t')
{
rp++;
tf = lp + ((((wp - lp) / 8) + 1) * 8);
while ((tf - wp) != 0)
*wp++ = 's';
}您正在用char 's'填充doc数组,这也是通过编写'\t'来完成的,所以上面的循环将无限大。
https://stackoverflow.com/questions/20112171
复制相似问题