2017-04-12 26 views
0

コードは、以下の「TEMP」の「STR」の他のすべての要素をコピーすることでうまくいくが、それは私のセグメンテーションフォールトを与えた後、私は唯一の「* STR」をインクリメントした場合(コアダンプ)。 Iは、(「でも」第二の手紙、第四、第六、等である)。奇数の文字と同じ「偶数」配列に文字列の偶数文字の全てをコピーしようとしていた。しかし、私はときに実現増分したまま増分します。私はそれを回避する方法を本当に知らないので、関数内の別の配列に文字を格納しようとしましたが、セグメンテーション違反がありました。私はなぜ2倍の増分はOKですが、1倍ではないことは分かりません。セグメンテーションフォールト(コアダンプ)

#include <stdio.h> 
#include <string.h> 
#define N 100 

void encrypt(const char*); 

int main(void) 
{ 
    char str[N]; 
    printf("Please enter a message: "); 
    gets(str); 

    encrypt(&str); 
return 0; 
} 

void encrypt(const char *str) 
{ 
    int i, j, length; 
    char temp[N], odd[N], even[N]; 

    length = strlen(str); 

    for (j = 0; *str < *str + length; *str++, *str++, j++) 
    { 
     temp[j] = *str; 
    } 
    printf("%s", temp); 
} 
+0

はどのようにj'は 'N'を超えることはありません '知っているのですか? – DyZ

+4

'* strの<* STR + length'この行が何をするか、あなたの[ラバーダック](https://en.m.wikipedia.org/wiki/Rubber_duck_debugging)に説明してください。 –

+0

そして 'encrypt'をどのように呼び出すかを示します。 –

答えて

2

は、私はあなたが実際にこれを書きたいとします

for (j = 0; str < str + length; str++, str++, j++) 

しかし、これはとにかくのでstr < str + length間違っている:より多くのクリアビットがある。このように書くことができ

for (j = 0; str < str + length; *str++, *str++, j++) 

常に真です。

これは何が必要です:

for (j = 0; j < length; j++) 
{ 
    temp[j] = *str; 
    str += 2; 
} 
+1

コードサンプルは同等ではないことに注意してください。 'str Matthias

+0

@Matthias right、答えが編集されました。 –

+0

これは動作しますが、最後にはいくつかの迷いのランダムな文字があります。私が「こんにちは」と入力したように、これは「temp」に格納されます。Helloğa ' – Str8Dev

関連する問題