分割コンパイルでファイルread_line.c,read_line.h,read_file.cをリンクして
実行したいのですがエラーが出て、実行できません。
以前に実行したときのメモは gcc -o read_file read_file.c read_line.c -Wallで出来たとありますが、
エラーになります。ファイル名などのチェックをしたのですが、うまくいきません。
コンパイルの仕方が間違っているのでしょうか。助言、ご教授をお願いします。
コード read_file.c // 標準入力からテキストファイルを読み込み, // それを標準出力に吐くプログラムです。 #include <stdio.h> #include <stdlib.h> #include <assert.h> #define ALLOC_SIZE (256) #include "read_line.h" char **add_line(char **text_data, char *line, int *line_alloc_num, int *line_num) { assert(*line_alloc_num >= *line_num); if (*line_alloc_num == *line_num) { text_data = realloc(text_data, (*line_alloc_num + ALLOC_SIZE) * sizeof(char*)); *line_alloc_num += ALLOC_SIZE; } text_data[*line_num] = line; (*line_num)++; return text_data; } char **read_file(FILE *fp, int *line_num_p) { char **text_data = NULL; int line_num = 0; int line_alloc_num = 0; char *line; while ((line = read_line(fp)) != NULL) { text_data = add_line(text_data, line, &line_alloc_num, &line_num); } /* text_dataを、本当に必要なサイズまで縮める */ text_data = realloc(text_data, line_num * sizeof(char*)); *line_num_p = line_num; return text_data; } int main(void) { char **text_data; int line_num; int i; text_data = read_file(stdin, &line_num); for (i = 0; i < line_num; i++) { printf("%s\n", text_data[i]); } free_buffer(); return 0; } read_line.h #ifndef READ_LINE_H_INCLUDED #define READ_LINE_H_INCLUDED #include <stdio.h> extern char *read_line(FILE *fp); void free_buffer(void); #endif read_line.c // 標準入力からテキストファイルを読み込み, // それを標準出力に吐くプログラムです。 #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define ALLOC_SIZE (256) #include "read_line.h" char **add_line(char **text_data, char *line, int *line_alloc_num, int *line_num) { assert(*line_alloc_num >= *line_num); if (*line_alloc_num == *line_num) { text_data = realloc(text_data, (*line_alloc_num + ALLOC_SIZE) * sizeof(char*)); *line_alloc_num += ALLOC_SIZE; } text_data[*line_num] = line; (*line_num)++; return text_data; } char **read_file(FILE *fp, int *line_num_p) { char **text_data = NULL; int line_num = 0; int line_alloc_num = 0; char *line; while ((line = read_line(fp)) != NULL) { text_data = add_line(text_data, line, &line_alloc_num, &line_num); } /* text_dataを、本当に必要なサイズまで縮める */ text_data = realloc(text_data, line_num * sizeof(char*)); *line_num_p = line_num; return text_data; } int main(void) { char **text_data; int line_num; int i; text_data = read_file(stdin, &line_num); for (i = 0; i < line_num; i++) { printf("%s\n", text_data[i]); } free_buffer(); return 0; } 実行結果 naka@naka ~/src_dos $ gcc -c read_line.h naka@naka ~/src_dos $ gcc -c read_file.c naka@naka ~/src_dos $ gcc -c read_line.c $ gcc -c read_line.c read_line.c: In function 'add_character': read_line.c:33:39: error: expected expression before ')' token (st_current_buffer_size+ALLOC_SIZE)*sizeof(char)); ^ read_line.c:34:39: error: expected expression before ';' token st_current_buffer_size += ALLOC_SIZE; ^ naka@naka ~/src_dos $
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/11 07:45
2018/01/11 07:47
退会済みユーザー
2018/01/11 07:55