堆栈损坏的阵列/分段错误?在C.

时间:2013-02-03 06:32:04

标签: c arrays segmentation-fault

这是一个简单的代码,希望我搜索加起来达到目标​​值的整数对,但我不知道它有什么问题。请帮帮忙?!

#include<stdio.h>

int main(void) {
    int sortedarr[20], targetsum, mysum, i=0, k=19, count=0; /* Declaring variables */

    printf("\nEnter target value sum: ");
    scanf("%d", &targetsum);
    printf("Enter sorted array: ");
    scanf("%s", &sortedarr[20]);

    while(k>i) {
        mysum=sortedarr[k]+sortedarr[i];

        if(mysum==targetsum) {
            printf("(%d, %d)", sortedarr[i], sortedarr[k]);
            i++;
            k+=-1;
            count++;
        }
        else if(mysum>targetsum)
            k+=-1;
        else if(mysum<targetsum)
            i++;
    }

    if(count==0)
        printf("No pairs of integers");

    return 0;
}

2 个答案:

答案 0 :(得分:1)

scanf("%s", &sortedarr[20])尝试将字符串读入sortedarr,从 last 元素开始。只要您的用户输入的字符超过sizeof(int),就会导致分段错误。

你想要做的是:

for (c=0; c < 20; c++) {
  scanf("%d", &sortedarr[c]);
}

答案 1 :(得分:0)

scanf(“%s”,&amp; sortedarr [20]);

这超出了数组的末尾,可能会破坏targetsum。 在前面的回答中,当循环运行到19时,可以避免这个错误。

所以这句话是假的: “将一个字符串放入sortedarr,从最后一个元素开始。”

在最后一个元素“之后”访问该数组。这可能会也可能不会腐蚀任何东西。它没有被定义。所以一切都会发生。