文字配列へのポインター、そのサイズ、および 1 を引数として取る機能を作成しようとしています。
#include<stdio.h>
#include<string.h>
#define FIRST_LINE 1
#define DONE 2
#define MORE_LINES 3
#define EXTRA 4
int a_fun(int, char *, size_t);
main()
{
char que[20];
int status=0;
status=a_fun(FIRST_LINE,que, sizeof(que));
fputs(que,stdout);
printf("\nStatus:\t %d\n",status);
return 0;
}
int a_fun(int lnum, char *str, size_t sz)
{
char *temp, ch, *end="!exit";
if(lnum==FIRST_LINE)
{
if (fgets (str, sz, stdin) == NULL)
{
printf("\nEntered nothing at all. (Type !exit to terminate)\n");
return FIRST_LINE;
}
for(;(*str!='\0'||*end!='\0');str++,end++)
{
if(!*str) if(!*end) return DONE;
}
if(strlen(str)>=sz)
{
while((ch=getchar())!='\n'); //cleaning buffer
return EXTRA;
}
return MORE_LINES;
}
}
「!exit」と入力して入力を終了したいのですが、それができません。私はそれを withif(strcmp(str,"!exit")==0) return DONE;
と with でやろうとしましたif(str=="!exit") return DONE;
最後に、両方の文字を文字ごとに比較しようとしましたが、すべて同じです。解決策を教えてください。
より多くの行を入力するには、a_fun() で条件付きブロックを使用できるため、基本的に現在は 1 行の入力関数であり、私の問題はその間に入力プロセスを終了することです (複数行の状態になる場合)。
私の元の問題に加えて、この機能をより安全にするための提案をいただければ幸いです。私のWebサイトのCGIコードでこの機能を使用する予定だからです。