段错误。。寒

aizailuoyeshi 2009-09-22 09:13:30
程序介绍,输入字符串,比如a123x456 789;
输出其中的数字串,即123 456 789
程序#include<stdio.h>
#include<string.h>
void sort(char str[50]);
int main()
{
char str[50];
printf("input a str\n");
fgets(str,50,stdin);
sort(str);
}
void sort(char str[50])
{
int i,j=0,p=0,num=0;
int a[50];
for(i=0;i<strlen(str);i++)
{
if(str[i]>='0'&&str[i]<='9')
{
p++;
if(str[i+1]<'0'||str[i+1]>'9')
{
for(i=0;i<p;i++)
{
num=num+(str[i-p+1]-48)*10^(p-1);
a[j]=num;
j++;
p=0;
}
}

}
}

for(i=0;i<(j-1);i++)
printf("%5d",a[i]);
}
25(a[j]=num;)行出现段错误,能否有人帮忙查下
...全文
77 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
AldisZhan 2009-09-22
  • 打赏
  • 举报
回复
for(i=0;i <p;i++)
{
num=num+(str[i-p+1]-48)*10^(p-1); //就算不说10^(p-1); 的问题
a[j]=num;
j++;
p=0; // p都为0了 i<p;i++ 的有意义吗
}
这种循环 无论如何只做一次或不做 你直接改成 if(p>0){}else{} 得了
problc 2009-09-22
  • 打赏
  • 举报
回复
按楼主的想法改了一下程序
#include <stdio.h>
#include <string.h>
#include <math.h>
void sort(char str[50]);
int main()
{
char str[50];
printf("input a str\n");
fgets(str,50,stdin);
sort(str);
}
void sort(char str[50])
{
int i,j=0,p=0,num=0;
int a[50];
for(i=0;i <strlen(str);i++)
{
if(str[i]>='0'&&str[i] <='9')
{
p++;
if(str[i+1] <'0'||str[i+1]>'9')
{
for(int k=0;k <p;k++)
{
num=num+(str[i-k]-'0')*pow(10.0L,k);
}
a[j]=num;
j++;
p=0;
num = 0;
}

}
}

for(i=0;i <j;i++)
printf("%5d",a[i]);
}
aizailuoyeshi 2009-09-22
  • 打赏
  • 举报
回复
哈哈,沙加好幽默哈
ZangXT 2009-09-22
  • 打赏
  • 举报
回复
最后j越界了
你在执行过程中把j的值输出看看。
xiaocai0001 2009-09-22
  • 打赏
  • 举报
回复
你一层套一层循环, i重复使用了... 导致无限循环!
brookmill 2009-09-22
  • 打赏
  • 举报
回复
这是什么?
10^(p-1)
楼主是想算10的(p-1)次方吗?不能这么算。在c语言里这是异或
要调用库函数pow(10, p-1)
xiaocai0001 2009-09-22
  • 打赏
  • 举报
回复
segmentation fault一般都是由越界访问造成的.

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧