在Linux下的编程问题
下列程序可被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];