質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

2435閲覧

分割コンパイルでエラーが出てコンパイルできない。

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/01/11 06:05

編集2018/01/11 08:54

分割コンパイルでファイル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 $

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

gcc.exe: error: read_line.c: No such file or directory

と出力されているので、read_line.cがカレントフォルダに存在していないとしか思えません。
ファイルがあることは確認しましたか?

また最後の行だけread_line1.cとなっていますが、コピペミスでしょうか?

投稿2018/01/11 07:36

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/11 07:45

ありがとうございます。カレントディレクトリにファイルは存在します。何回も名前を書き変えてみたり しましたが、だめでした。read_line1.cはread_line.cのコピペミスです。
ttyp03

2018/01/11 07:47

疑うわけではありませんが、lsコマンドの結果を貼り付けてもらえますか。
退会済みユーザー

退会済みユーザー

2018/01/11 07:55

すみません。おいているフォルダが間違っていたみたいです。 後頑張ってみます。
guest

0

ベストアンサー

gccを起動した作業ディレクトリー~/src_dosにソースファイルread_line.cやread_line.hがないように見えますが・・・

投稿2018/01/11 06:32

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/11 07:54

home/naka/src_dosのフォルダにファイルを移して実行出来そうです。 大分エラーが出ていますが、やってみます。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2018/01/11 08:57

read_line.cで実行結果のようなエラーがでています。どうしてかわからないので、教えていただけますか。 read_line.hとread_file.cはオブジェクトファイルができています。よろしくおねがいします。
KSwordOfHaste

2018/01/11 09:07 編集

分割コンパイルとは別の問題ではないですか?閲覧者が混乱するといけないので異なるトピックで新たに質問を起こした方がよいと思います。 また閲覧者にはソースの行番号がわからないのでエラーがどの行ででているのか探すのが煩わしい場合がある点に注意してください。ソース上にコメントなどで「//この行でエラー」などのようにしておくのがマナーと思います。
退会済みユーザー

退会済みユーザー

2018/01/11 09:11

わかりました。質問しなおします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問