K&Rの「TheCプログラミング言語」を購入し、その中で演習を行うために最善を尽くしています(この本をご存知の場合は、演習1.20です)。
このプログラムは、キーボードから入力を受け取り、タブ文字をTABLENGTHで指定された適切な量のスペースに変換することを目的としています。
コードは以下のとおりです。実行しようとすると、セグメンテーション違反が発生します。
detab.c:
#include <stdio.h>
#define TABLENGTH 8
#define MAXLINE 1000
int getline(char line[], int len);
int main()
{
char line[MAXLINE];
int length;
while((length = getline(line, MAXLINE)) > 0) {
printf("%s");
}
}
int getline(char line[], int len)
{
int i = 0;
int c;
for(i = 0; i < (MAXLINE - 1) &&
((c = getchar()) != EOF && c != '\n'); i++) {
// if c is tab, replace with spaces
if(c == '\t') {
while((TABLENGTH - (i % TABLENGTH)) != 0) {
line[i] = ' ';
i++;
}
i--;
continue;
}
}
line[i] = c;
}
if(c == '\n') {
line[i] = c;
i++;
}
line[i] = '\0';
return i;
}