以下のように動くプログラムを作っています。
<例1>Tokyo + Roma→TRookmyao
<例2>Roma + Empire →REommpaire
例2のように、長い方の文字列の余った部分は生成する文字列の後ろに連結させます。
引数のa,bは文字列で、dは生成する配列へのポインタです。
しかし、以下のコードだと例2のケースがSegmentation Faultになってしまいます。
これを回避して正常に動作させたいです。よろしくお願いします。
C++
1#include <stdio.h> 2#include <string.h> 3 4char d[200]; 5 6void interleave(char* a, char* b, char* d){ 7 d[0] = a[0]; 8 d[1] = b[0]; 9 10 //iは配列d用の変数、jは配列b用の変数 11 if(strlen(a) > strlen(b)){ 12 for(int i = 2; a[i/2] != '\0'; i+= 2){ 13 int j = 1; 14 d[i] = a[i/2]; 15 d[i+1] = b[j]; 16 j++; 17 } 18 } 19 20 if(strlen(b) > strlen(a)){ 21 int j = 1; 22 23 for(int i = 2; b[j] != '\0'; i += 2){ 24 d[i] = a[i/2]; 25 d[i+1] = b[j]; 26 j++; 27 } 28 29 int f = strlen(a);//文字数が少ない方の文字数を計算 30 for(int i = f * 2; b[f] != '\0'; i++){ 31 d[i] = b[f];//余った文字列を連結 32 } 33 } 34 35 int e = strlen(a) + strlen(b); 36 d[e] = '\0'; 37} 38 39int main(){ 40 interleave("INIAD", "Toyo", d); 41 printf("%s\n", d); 42 interleave("Toyo", "University", d); 43 printf("%s\n", d); 44 return 0; 45}
> なってしまいます
そうですね。だからどうしろと? いや、もちろん正解を示せということなのでしょうけれど、
掲示板は間違ったプログラムを投げると自動で正解を出してくれる自動システムではないのですから、
もう少し言いようというものがあると思うのですが。
すくなくともその事象について「動作をトレースしてみたがどうしても期待する結果がでるはずで間違いが見つからない」みたいな話はあるべきじゃないかと思ったりするのですが。
そうですね。失礼しました。現在は修正されています。
あとプログラムの挙動を細かく説明していただいてありがとうございました。
とても理解が捗りました。
回答3件
あなたの回答
tips
プレビュー