2 avirl108 avirl108 于 2015.06.08 06:36 提问

么么哒、这题用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();
}

6个回答

91program
91program   Ds   Rxr 2015.06.08 08:07

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

91program
91program 回复avirl108: 修改为:for(i=0;'0'<=(str+i) && (str+i)<='9';i++)
2 年多之前 回复
avirl108
avirl108 然后怎么修改??
2 年多之前 回复
91program
91program for 循环中不应该写成 *(str+i),而应该是 (str+i)
2 年多之前 回复
frank_20080215
frank_20080215   2015.06.08 06:40

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

gamefinity
gamefinity   Rxr 2015.06.08 07:18

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

u010655288
u010655288   2015.06.08 10:39

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

avirl108
avirl108 可是还是不对啊!
2 年多之前 回复
VisualEleven
VisualEleven   Ds   Rxr 2015.06.09 11:30
 #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();
}
fcxxxer
fcxxxer   2015.06.09 18:59

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

Csdn user default icon
上传中...
上传图片
插入图片