以下のように動くプログラムを作っています。
<例1>Tokyo + Roma→TRookmyao
<例2>Roma + Empire →REommpaire
例2のように、長い方の文字列の余った部分は生成する文字列の後ろに連結させます。
引数のa,bは文字列で、dは生成する配列へのポインタです。
しかし、以下のコードだと例2のケースがSegmentation Faultになってしまいます。
これを回避して正常に動作させたいです。よろしくお願いします。
C++
#include <stdio.h> #include <string.h> char d[200]; void interleave(char* a, char* b, char* d){ d[0] = a[0]; d[1] = b[0]; //iは配列d用の変数、jは配列b用の変数 if(strlen(a) > strlen(b)){ for(int i = 2; a[i/2] != '\0'; i+= 2){ int j = 1; d[i] = a[i/2]; d[i+1] = b[j]; j++; } } if(strlen(b) > strlen(a)){ int j = 1; for(int i = 2; b[j] != '\0'; i += 2){ d[i] = a[i/2]; d[i+1] = b[j]; j++; } int f = strlen(a);//文字数が少ない方の文字数を計算 for(int i = f * 2; b[f] != '\0'; i++){ d[i] = b[f];//余った文字列を連結 } } int e = strlen(a) + strlen(b); d[e] = '\0'; } int main(){ interleave("INIAD", "Toyo", d); printf("%s\n", d); interleave("Toyo", "University", d); printf("%s\n", d); return 0; }
> なってしまいます
そうですね。だからどうしろと? いや、もちろん正解を示せということなのでしょうけれど、
掲示板は間違ったプログラムを投げると自動で正解を出してくれる自動システムではないのですから、
もう少し言いようというものがあると思うのですが。
すくなくともその事象について「動作をトレースしてみたがどうしても期待する結果がでるはずで間違いが見つからない」みたいな話はあるべきじゃないかと思ったりするのですが。

そうですね。失礼しました。現在は修正されています。
あとプログラムの挙動を細かく説明していただいてありがとうございました。
とても理解が捗りました。
まだ回答がついていません
会員登録して回答してみよう