質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

1416閲覧

【C言語】"scanf"から得た2つの文字列の結合方法

HYYH

総合スコア16

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/12/24 03:39

編集2021/12/24 04:17

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/12/24 04:01

貼られているコードでは実行まで行き着けるように思えませんが…… (「引数として返す」という言葉が怪しい気がしないでもないが) とりあえず引数の個数について考えれば * 入力のために2個 * 「引数として返す」とかいう行為のための引数が1個 で,計3個ほど必要なんじゃないかと思えますが,どうなんですかね. まずは「何はともあれ題意に見合う形のものを作る」ということを考えてはどうです?
fana

2021/12/24 04:46 編集

> 文字列を返り値として返す に変わった様子だが,それならそれで 【「文字列を」返せや】 って話なのだから, 戻り値の型が char では題意に沿っていないのではないか? てきとーなコードを書く前に,方法論の側: 【「文字列」っていうのは,どうやって返せばよいのか?】 という話をまずは固めるべきだし, もしも固まっているのなら「俺はこういう方法で 文字列を返す を実現しようとしているのだが」という話をちゃんと述べるべき. (あなたが採用する方法次第で実装が変わるハズだから)
退会済みユーザー

退会済みユーザー

2021/12/24 05:03

コンパイラ何使ってるかは知らないけど、実行以前にコンパイルエラーになると思いますが。char* とcharの区別はついていますか?
guest

回答2

0

ベストアンサー

C

1char string(char a,char b) 2{ 3 char c; 4 sprintf(c,"%s%s\n",a,b); 5 return a; 6}

charは文字であり、文字列ではない

その関数stringは 「文字をふたつもらって文字を返す」になっている。
「文字列をふたつもらって文字列を返す」に改めるべし。

※ 「文字がcharなのは知ってるが、文字列はなんだかわかんない」なら教本読むべし

投稿2021/12/24 06:52

編集2021/12/24 06:59
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C

1char* astrcat(const char* a, const char* b) 2{ 3 size_t na = strlen(a), nb = strlen(b); 4 char* c = (char*)malloc(na + nb + 1); 5 memcpy(c, a, na); 6 memcpy(c + na, b, nb); 7 c[na + nb] = '\0'; 8 return c; 9}

チキンマルナゲット君のために、元の文字列は非破壊にしてあるぞい。ヘッダぐらいは自力で調べ給へ。

投稿2021/12/24 23:36

majiponi

総合スコア1722

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問