当我执行代码时,需要帮助来找出分段错误(核心转储)的原因。我已经尝试研究原因,但没有发现与我的代码有关的信息。对不起,对于编程而言,不良代码仍然是新手
#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;
}
答案 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')
此外,请确保不要切换条件的顺序,否则您将再次读取超出范围的内存。