么么哒、这题用C语言为什么出现Segmentation fault,求解释并纠错(谢绝新代码)

//依次输出字符串中的数字团,比如poq89ayu1u&129aa

//就输出89,129,一共2个数。
//萌妹纸诚心诚意求修改

include

int main()
{
char str[80],*pstr;
int i=0,flag=1,num=0;
pstr=str;
gets(str);
while(flag==1)
{
for(i=0;
(str+i)!='\0';i++)
{
if('0'<=*(str+i)&&*(str+i)<='9')
num=num+(*(str+i)-48);
}
flag=0;

    while(flag==0)  
                {
                printf("%d,",num);
                flag=1;
                }
    }

getch();
}

内存溢出,可能数组超界,写到不应该的内存位置

不知道你是什么环境做的,我在ubuntu 14.4.1下,没有段错误,但是死循环,和我最初的判断一致
死循环的问题在于:while(flag==1)后面缺少{}。因此不断的重复for。

基本上可以确定是 for 循环写的有问题:
(1)判断字符,应该是
for(i=0;'0'<=(str+i)&&*(str+i)<='9';i++)
(2) for 循环没有结束
应该判断 (str+i) 等于零时退出 for 循环

首先while()循环后面缺个大括号,其次0,9,应该加个单引号,如:‘0’,‘9’

 #include "stdafx.h"

#include <stdio.h>
#include <conio.h>

int main()
{
    char str[80] = {0};
    gets(str);
    char* pstr=str;

    for(;*pstr != '\0'; ++pstr)
    {
        bool flag = false;
        char ch = *pstr;
        if(('0' <= ch) && ('9' >= ch))
        {
            flag = true;
            printf("%c", ch);
        }
        if(flag)
        {
            ch = *(++pstr);
            if(ch != '\0')
            {
                if(('0' <= ch) && ('9' >= ch))
                {
                    printf("%c", ch);
                }
                else
                    printf(",");
            }
        }
    }
    getch();
}

访问了非法内存,建议在运行时单步调试一下。。