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

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

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

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

Q&A

解決済

3回答

1887閲覧

エラーが出てどこを直していいかわからない

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2018/01/11 09:23

read_line.cというファイルをコンパイルすると実行結果のようなエラーが出ます。
意味と直し方がわかりません。教えて頂けませんか。

コード read_line.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #define ALLOC_SIZE static char *st_line_buffer=NULL; static int st_current_buffer_size=0; static int st_current_used_size=0; static void add_character(int ch) { assert(st_current_buffer_size >= st_current_used_size); // if文の中がエラーが出ている箇所です。 if(st_current_buffer_size == st_current_used_size){ st_line_buffer=realloc(st_line_buffer, (st_current_buffer_size+ALLOC_SIZE)*sizeof(char)); st_current_buffer_size += ALLOC_SIZE; } // バッファの末尾に1文字追加。 st_line_buffer[st_current_used_size]=ch; st_current_used_size++; } //fpから1行読み込む。ファイルの末尾に来たら,NULLを返す。 char *read_line(FILE *fp) { int ch; char *ret; st_current_used_size=0; while((ch=getc(fp)) != EOF){ if(ch=='\n'){ add_character('\0'); break; } add_character(ch); } if(ch==EOF){ if(st_current_used_size>0){ add_character('\0'); // 最後の行の後に改行がなかった場合 }else{ return NULL; // ファイルが終わったら、NULLを返す。 } } ret=malloc(sizeof(char)*st_current_used_size); strcpy(ret,st_line_buffer); return ret; } void free_buffer(void) { free(st_line_buffer); st_line_buffer=NULL; st_current_buffer_size=0; st_current_used_size=0; } 実行結果 naka@naka ~/src_dos $ 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; ^

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

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

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

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

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

guest

回答3

0

ベストアンサー

#define ALLOC_SIZEマクロは
(st_current_buffer_size+)*sizeof(char));といったコードに展開されて構文エラーが発生しています。
#define ALLOC_SIZE 123のようにサイズ値を指定する必要があるのでは?

投稿2018/01/11 09:34

can110

総合スコア38252

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

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

退会済みユーザー

退会済みユーザー

2018/01/11 09:46

ありがとうございます。打ち込み忘れでした。コードだけにとらわれていました。
guest

0

ALLOC_SIZEに何もdefineしていないからでは?

投稿2018/01/11 09:30

sngm45

総合スコア10

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

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

退会済みユーザー

退会済みユーザー

2018/01/11 09:46

おしゃる通りでした。ありがとうございます。
guest

0

#define ALLOC_SIZE

ここに数字が書かれていないので

st_current_buffer_size += ;

という不正なコードになっています。

#define ALLOC_SIZE 80

の様に指定してみて下さい。

投稿2018/01/11 09:29

mattn

総合スコア5030

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

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

退会済みユーザー

退会済みユーザー

2018/01/11 09:47

皆さんありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問