棒棒棒糖最低批发市场:在Linux下的编程问题

来源:百度文库 编辑:高校问答 时间:2024/05/05 22:46:09
下列程序可被gcc编译,但运行时报“段错误”。在WindowsXP下用WinTC编译成功正常运行。这怎么回事?
int str2num(char *p)
{
int length=0,i=0,tmp=1,tmp2=1;
unsigned long int sum=0;
for(length=0;p[length]!='\0';length++)
if(p[length]<'0' || p[length]>'9')
{
printf("str2num error\n");
return -1;
}
for(i=0;i<=length-1;i++)
{
for(tmp=1,tmp2=length-i;tmp2>1;tmp2--)
tmp=tmp*10;
sum+=(unsigned long int)(p[i]-'0')*tmp;
}
return sum;
}
int main()
{
char *s;
scanf("%s",s);
printf("\n%d",str2num(s));
getch();
return 0;
}

你的main函数里指针s使用前没有给分配空间
s类型没有问题。
在scanf前用给s分配空间就可以了。比如用s=(char *)malloc(10*sizeof(char));给s分配长度为10个字符的空间或直接定义成char s[10];

s的类型有问题,用%s进行输入不通过的吧