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

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

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

4回答

2109閲覧

プログラミング 間違いさがし

kakaadada

総合スコア18

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

1クリップ

投稿2017/08/02 18:00

この関数の定義には致命的な間違いがあるみたいなので間違いと解決方法を教えてください。

char *str_concat(char *s1, char *s2){
char s3[256];
char *p = s3;
while (*p++ = *s1++);
p -= 1;
while(*p++ = *s2++);
return s3;
}

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

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

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

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

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

maiko0318

2017/08/02 18:31 編集

何をしたくてこの関数を作ったのか仕様は書いてもらわないと間違いがわかりません。
kakaadada

2017/08/02 18:15

文字列を結合して返す関数str_concatの間違え探しです
guest

回答4

0

ベストアンサー

質問で言語が指定されていませんが、C++っぽいので、C++11以上だという前提で書きます。

C++11以上で文字列を扱う場合はchar *よりもstd::stringを使うべきであり、参照渡しやムーブセマンティクスを意識して書くべきです。

C++

1std::string str_concat(const std::string &s1, const std::string &s2) 2{ 3 std::string s3; 4 s3.append(s1); 5 s3.append(s2); 6 return s3; 7}

つまり、C++を使っているのに、文字列操作に便利なstd::stringを使わずにchar *を使っているのがそもそもの間違いと思われます。最適化によって速度もそれほど変わらないはずですし、ローカル変数をそのまま返せばムーブセマンティクスになっているはずです。

投稿2017/08/02 21:37

raccy

総合スコア21735

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

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

0

ローカル変数として用意したs3を関数の返り値として返してしまうのはまずくないですかね?
代替案としてはmallocなどでメモリ領域を確保して、そこに書き込んで返す...などでしょうか。

投稿2017/08/02 20:33

Bongo

総合スコア10807

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

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

0

中身と関数名を見る限り、s1 および s2 を結合した結果文字列を返す関数、のようです。

が、s3 が 256byte という固定長です。
s1 と s2 の合計長が 256byte を超えると、segfault しますね。

投稿2017/08/02 23:52

tacsheaven

総合スコア13703

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

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

0

Java

1char *str_concat(char *s1, char *s2){ 2char s3[256]; 3char *p = s3; 4while (*p++ = *s1++); 5p -= 1; 6while(*p++ = *s2++); 7*p=0; //抜けているかも? 8return s3; 9}

投稿2017/08/02 18:09

maiko0318

総合スコア876

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問