分段错误(核心已转储)执行代码时出错

时间:2018-09-18 00:08:58

标签: c cygwin

当我执行代码时,需要帮助来找出分段错误(核心转储)的原因。我已经尝试研究原因,但没有发现与我的代码有关的信息。对不起,对于编程而言,不良代码仍然是新手

#include <stdio.h>
int main(void)
{
char str[1000];
int counta , counte, counti,counto,countu;
int q =0;
    printf("Enter a String: \n");
    scanf("%s" , str);



//if (feof(stdin)) break; //CRTL D TO STOP


    while(1==1 && str[q] != 1000 ) {

    if(str[q] == 'a')
    {
            q++;
            counta++;
    }
    else q++;

    }
    q = 0;

    //while(str[q]

 printf("%d" , counta);


return 0;

}

1 个答案:

答案 0 :(得分:1)

您的程序有一个条件循环-

while (1==1 && str[q] != 1000) 

1==1是无用的,因为1总是等于1。str[q] != 1000也将始终为真,因为str[q]char类型,不能保留值1000

因此,您的程序进入了无限循环。因此,它最终访问了超出str范围的内存。并且这里的行为没有定义。大多数情况下,您的程序将崩溃。

您可能想说的是-

while ( q != 1000)

这将起作用,并且不会引起任何未定义的行为,但是请注意,字符串在数组总长度之前结束。字符串在遇到'\0'字符时结束。您应该使用条件-

while ( q < 1000 && str[q] != '\0')

此外,请确保不要切换条件的顺序,否则您将再次读取超出范围的内存。