2つの文字列を引数として入力し、それらを結合した文字列を返り値として返す関数を
作成しなさい。
[実行結果]
文字列を入力してください。
1つ目:aaa
2つ目aaaa
Segmentation fault (コアダンプ)
[質問]
なぜエラーが起きるのか?またこの改善方法を教えてください。
c
1#include<stdio.h> 2 3char string(char *,char *);/*プロトタイプ宣言*/ 4 5int main(void) 6{ 7 char str1[100],str2[100]; 8 9 /*文字列の代入*/ 10 printf("文字列を入力してください。\n"); 11 printf("\n1つ目:"); 12 scanf("%s",str1); 13 printf("\n2つ目:"); 14 scanf("%s",str2); 15 16 printf("%s",string(str1,str2)); 17 return 0; 18} 19 20/*関数の定義*/ 21char string(char a,char b) 22{ 23 char c; 24 sprintf(c,"%s%s\n",a,b); 25 return a; 26}
貼られているコードでは実行まで行き着けるように思えませんが……
(「引数として返す」という言葉が怪しい気がしないでもないが)
とりあえず引数の個数について考えれば
* 入力のために2個
* 「引数として返す」とかいう行為のための引数が1個
で,計3個ほど必要なんじゃないかと思えますが,どうなんですかね.
まずは「何はともあれ題意に見合う形のものを作る」ということを考えてはどうです?
> 文字列を返り値として返す
に変わった様子だが,それならそれで 【「文字列を」返せや】 って話なのだから,
戻り値の型が char では題意に沿っていないのではないか?
てきとーなコードを書く前に,方法論の側:
【「文字列」っていうのは,どうやって返せばよいのか?】
という話をまずは固めるべきだし,
もしも固まっているのなら「俺はこういう方法で 文字列を返す を実現しようとしているのだが」という話をちゃんと述べるべき.
(あなたが採用する方法次第で実装が変わるハズだから)
コンパイラ何使ってるかは知らないけど、実行以前にコンパイルエラーになると思いますが。char* とcharの区別はついていますか?
回答2件
あなたの回答
tips
プレビュー