C言語でCGIやってます。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あま

C言語でCGIやってます。

#1

投稿記事 by あま » 14年前

簡単掲示板を作成しようとしているのですが
コンパイルがうまくいって実行するときになると
スクリプトエラーになってしまいます。

int main()
{
char *data;
FILE *fp;

printf("Content-type: text/html\n\n");
printf("<html><head><title>C-CGI 簡単掲示板</title></head>\n");
printf("<body>\n");
printf("<font color=\"red\">C-CGI 簡単掲示板\n");
printf("<hr>\n");

fp = fopen("./logs.cgi","r");
while(fgets(data,1024,fp) != NULL)
{
printf("%s",data);
}
fclose(fp);
}

まだ作成段階で今のところこんな感じで書いてるのですが。。。

fp = fopen("./logs.cgi","r");
while(fgets(data,1024,fp) != NULL)
{
printf("%s",data);
}
fclose(fp);
この部分を消すとちゃんと表示されますが
ファイル操作をするとスクリプトエラーになります。
どういうことでしょうか?

サーバーはXreaをレンタルして使用しています。

あま

Re:C言語でCGIやってます。

#2

投稿記事 by あま » 14年前

それから追記なんですが、
HTML出力のところも毎回
printfを使うのめんどうなので
sprintf(buf,"Content-type: text/html\n\n"
"<html>\n"
"<head>・・・・・\n");
という感じで書いて
printf("%s",buf);
とやるのですが、これもスクリプトエラーになります。

Dixq (管理人)

Re:C言語でCGIやってます。

#3

投稿記事 by Dixq (管理人) » 14年前

まず、コンパイル環境はサーバー上ですか?
サーバー上ではない場合、サーバーのOSと同じ環境でコンパイルしていますか?

あま

Re:C言語でCGIやってます。

#4

投稿記事 by あま » 14年前

>まず、コンパイル環境はサーバー上ですか?
はい。サーバー上でコンパイルしています。
Perlで
system("gcc ./bbs.c -o bbs.cgi");
とやってコンパイルしています。
パーミッションは755です。

Dixq (管理人)

Re:C言語でCGIやってます。

#5

投稿記事 by Dixq (管理人) » 14年前

なるほど、シェルを開かなくてもそうやればコンパイル出来るんですね^^;

ところで、ファイルポインタは使う前にNULLかどうかチェックするべきだと思います。

fp = fopen("./logs.cgi","r");

if( fp == NULL ){
printf("open failed\n");
return 0;
}

while(fgets(data,1024,fp) != NULL)

みたいな。
きっとNULLなんだと思いますが、どうなります?

ISLe

Re:C言語でCGIやってます。

#6

投稿記事 by ISLe » 14年前

fgetsで読み込む前にdataが初期化されていないせいではないでしょうか?
No:64635のsprintfのバッファも同じ問題なのでは?

No:64635については文字列を並べると繋がるので
printf(
"Content-type: text/html\n\n"
"<html>\n"
"<head>・・・・・\n"
);
のようにするのはどうでしょう。

Dixq (管理人)

Re:C言語でCGIやってます。

#7

投稿記事 by Dixq (管理人) » 14年前

あ!
dataってただのポインタで領域確保してないですねorz

char data[1024];

にすると良いと思います。

あま

Re:C言語でCGIやってます。

#8

投稿記事 by あま » 14年前

おお!!
ありがとうございます^^v
無事にできました。
領域確保しないとダメだったんですね>_<

data[1024];

とすることで解決でした。

閉鎖

“C言語何でも質問掲示板” へ戻る