分段故障(核心转储)

时间:2017-04-12 05:38:38

标签: c arrays function pointers

下面的代码可以复制' str'的所有其他元素。在临时'但如果我只增加' * str'一旦它给我一个分段错误(核心转储)。 我试图将字符串的所有偶数字母复制到“偶数”中。数组,与奇数字相同。('偶数'是第二个字母,第四个,第六个,等等)但我意识到当我增加时它会保持增量。我真的不知道如何解决这个问题,所以我尝试将字母存储在函数内的不同数组中,但却出现了分段错误。我不明白为什么增量两次是好的,但一次不是。

#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);
}

1 个答案:

答案 0 :(得分:2)

我想你真的想写这个:

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

可以像这样写得更清楚一点:

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

但这无论如何都是错误的,因为str < str + length总是如此。

这就是你需要的:

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