2017-03-18 20 views
-1

別の配列に配列を挿入しようとしています。たとえば、String_1は123456789、String_2はabcdefghijkの2つの文字列があります。私がしたいのは、string_1[i]の0からiの後ろにstring_2[i]を挿入することです。期待される結果は1a2b3c4d5e6f7g8h9ijkです。私はそれを達成するために次の機能を作ったが失敗した。配列の要素を他の配列に順番に挿入するには?

void conj(char *string1, char *string2) 
{ 
    int length = 0, i = 0, j =0; 
    char *string[] = {string1, string2}; 
    char *string_temp = string[0]; 
    int length_1 = strlen(string[0]); 
    int length_2 = strlen(string[1]); 

    /* To compare the length of string[0] with the other one */ 
    if (length_1 >= length_2) 
     length = length_1; 
    else 
     length = length_2; 

    /* The error maybe occurs in the following code*/ 
    for (j=0; j<length; j++) 
    { 
     if (j < length_1) 
     { 
      *(string_temp+i) = *(string[0]+j); 
      i++; 
     } 
     if (j < length_2) 
     { 
      string_temp[i] = string[1][j]; 
      i++; 
     } 
    } 

    printf("After asserting, the string is %s", string_temp); 
} 

コンパイル後、stringの結果は混乱しています。たとえば、string1:12345678; string2:abcdefgijk;最終結果はlaabacbecfbgdhijkです。

たとえば、(string_temp+2) = *(string[0]+2);のように1つの要素を変更できることがわかりました。しかし、もう1つ追加した後、(string_temp+4) = *(string[0]+4);のように、文字列は変更されませんでした。 この問題を解決するのに役立つヘルプとガイダンスは感謝しています。

+0

申し訳ありません、挿入する必要があります> – Ghoster

+0

私はすぐに見ることができる間違いは '*(文字列[0] + j)'です。おそらく '*(&string [0] + j)'を意味できますか? – neoaggelos

+1

簡単な方法は、文字を1番目に挿入するのではなく、3番目の文字列に結果を入れることです。文字列の途中に挿入するには、挿入から終了までのすべての要素を移動し、他の要素のインデックスを変更します。あるいは、各文字列から最後に得られた文字の最終的な長さと位置を計算し、最後から結果を構築します。不要になるまで元の文字を上書きしないようにします(ただし、結果に合うように)。 – Dmitri

答えて

1

あなたが間違っています。 string1を変更して新しい文字列を作成すると、string[0]が変更されます。ここで

変更この

char *string_temp = string[0]; 

この行の

char *string_temp = malloc(100); 

beacuseにあなたは、文字列を変更している

*(string_temp+i) = *(string[0]+j); [0]も同じアドレスにstring_tempポイントを引き起こしますstring1

+0

別の質問、どのようにmallocの代わりに行うことができますか? – Ghoster

関連する問題