Cの初歩的な質問かもしれませんが、
Aという関数でキーボードから入力して文字列aに入れて返し、その戻り値aをmainの文字列bに入れたいのですが、うまくいきません。
どうすればよろしいでしょうか?
初歩的な質問ですが...
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 初歩的な質問ですが...
フォーラルムールをお読み頂けますか? テンプレートを使って書き込んでいただくのが良いと思います。
http://dixq.net/board/board.html
http://dixq.net/board/board.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 初歩的な質問ですが...
char a[256];は局所変数(ローカル変数)ですので、戻り値にすることはできません。
なぜなら関数Aから抜けると配列aは消滅するからです。
それと
char *b[10];
は文字型ポインタのポインタが10個ならんだ配列ですので、文字列を10個覚えることができます。
文字列が10個欲しいわけではないですよね?
命題の
>Aという関数でキーボードから入力して文字列aに入れて返し、その戻り値aをmainの文字列bに入れたいのですが
これを実現するためには戻り値に文字列を戻したいことなりますが、C言語ではmallocなどでaを動的確保しないと出来ないことになります。
【補足】
ココらへんをどう解決するかはkwさんの知識量によって左右されます。なので詳しい情報がほしいのです。
なぜなら関数Aから抜けると配列aは消滅するからです。
それと
char *b[10];
は文字型ポインタのポインタが10個ならんだ配列ですので、文字列を10個覚えることができます。
文字列が10個欲しいわけではないですよね?
命題の
>Aという関数でキーボードから入力して文字列aに入れて返し、その戻り値aをmainの文字列bに入れたいのですが
これを実現するためには戻り値に文字列を戻したいことなりますが、C言語ではmallocなどでaを動的確保しないと出来ないことになります。
【補足】
ココらへんをどう解決するかはkwさんの知識量によって左右されます。なので詳しい情報がほしいのです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 初歩的な質問ですが...
ソフト屋さんに次いでさらにヒント
scanf("%c",&ch);
アドレス渡し
ここらあたりで調べると幸せになれますよ
scanf("%c",&ch);
アドレス渡し
ここらあたりで調べると幸せになれますよ
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 初歩的な質問ですが...
2種類のサンプルを書いてみました。
1. GetStdinStr1
引数で渡すこと無しに、関数が char* を返すなら、関数内でメモリアロケートする必要があります。
関数内でメモリをアロケートして、その中に文字列を入れて返します。
その代り、受け取った後にfreeする必要があります。
2. GetStdinStr2
freeしなくて済むようにするなら、main側で確保した配列を渡してやり、関数内で格納してやると良いでしょう。
ただこれなら関数化する意味があまりありませんが・・。
1. GetStdinStr1
引数で渡すこと無しに、関数が char* を返すなら、関数内でメモリアロケートする必要があります。
関数内でメモリをアロケートして、その中に文字列を入れて返します。
その代り、受け取った後にfreeする必要があります。
2. GetStdinStr2
freeしなくて済むようにするなら、main側で確保した配列を渡してやり、関数内で格納してやると良いでしょう。
ただこれなら関数化する意味があまりありませんが・・。
#include <stdio.h>
#include <stdlib.h>
char *GetStdinStr1(int Len){
char *p = (char*)malloc(Len);
fgets(p, Len, stdin);
return p;
}
void GetStdinStr2(char *p, int Len){
fgets(p, Len, stdin);
}
int main(){
char* str1 = GetStdinStr1(256);
char str2[256];
GetStdinStr2(str2, 256);
printf("%s", str1);
printf("%s", str2);
free(str1);
return 0;
}