文字と文字列
Posted: 2018年12月05日(水) 17:39
大学の課題で躓いています。下記は問題です。
入力できるバッファサイズを指定してバッファオーバーフローを起こさない文字列入力関数char *mygets(char *s, int size) を作成し、次のmain()関数で動作を確認しなさい。ここでsizeは用意した配列の大きさ(入力できる文字列の長さ+1)とします。
そして自分が書いたものはこちらです。
このようにEOFで終わらせて文字列を出したいのですが、enterを二回押さないと終わりません。
NULLをどのように使えばctrl+dで終わらせることができるのでしょうか?
ご教授よろしくお願いします。
課題の提出日は木曜日の23:59までなのでそこまでには終わらせたいと思っています。
入力できるバッファサイズを指定してバッファオーバーフローを起こさない文字列入力関数char *mygets(char *s, int size) を作成し、次のmain()関数で動作を確認しなさい。ここでsizeは用意した配列の大きさ(入力できる文字列の長さ+1)とします。
char *mygets(char *, int);
main()
{
char buf[80];
while(*mygets(buf, 80)) puts(buf);
}
char *mygets(char * p, int size)
{
関数の本体を書く
}
/*gp4.c*/
#include<stdio.h>
char *mygets(char *,int);
main()
{
char buf[80];
while(*mygets(buf,80)) puts(buf);
}
char *mygets(char *sp,int size)
{
int c,i;
char *p;
i=0;
p=sp;
while((c = getchar()) != '\n'){
*p = c;
p++;
i++;
if(i == EOF) break;
if(i == size-1) break;
}
*p = '\0';
return sp;
}
コンパイル結果
[peodbm04-( ~/C )-554]gcc gp4.c -o gp4
[peodbm04-( ~/C )-555]./gp4
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaa
[peodbm04-( ~/C )-556]
NULLをどのように使えばctrl+dで終わらせることができるのでしょうか?
ご教授よろしくお願いします。
課題の提出日は木曜日の23:59までなのでそこまでには終わらせたいと思っています。