程序不报错但是就是运行不了这是为什么啊
发布网友
发布时间:2023-07-30 02:14
我来回答
共2个回答
热心网友
时间:2023-08-10 06:36
你好!你这里犯了一个严重的错误。
1.在你调用这个intToString函数的时候,你的第二个参数是作为结果参数来使用的,是用来存储得到的字符串,那么他一定要有自己的空间。
2.但是这个程序的主函数在调用时,没有为其开辟空间,只是传过去一个指针;这个指针还没初始化,是一个野指针。这样做很危险,并且会导致段错误。
3.你可以将主程序里的char *str 改成char str[n]; n代表你输入的最大字符长度+1;这里就是7,或者是用malloc来分配空间。char *str=(char *)malloc(7);malloc使用完毕之后要记得free。
希望能帮到你。
热心网友
时间:2023-08-10 06:37
按你的思路,帮你改对了真不是件容易的事,自己好好研究一下吧。
#include<iostream>
#include<cstring>
using namespace std;
void intToString( long num, char str[], int n)
{
int i = 0;
int m = 0;
char ch;
//得到逆序的数组
while(num !=0 )
{
str[i++] ='0'+num%10 ;
num /= 10;
}
//反转数组
for( m=0;m<i/2;m++ )
{
ch=str[m] ;
str[m]=str[i-m-1];
str[i-m-1]=ch;
}
str[i] = '\0';
cout << str<<endl ; //注意分号不能是全角或中文的
}
int main(){
char str[7]; //因为最大数为100000,输出总长不超过6,故定义长度7
long num=1234;
int len;
do {
cin >> num ;
} while( num <0 || num >=100000 );
intToString( num,str, 7); //不清楚第三个参数有何用
len=strlen(str); //取数的长度
for(int i=0;str[i]!='\0';i++) //for语句写的不对,判断结束也不要写死成5
{
switch( str[i]-'0' )
{
case 1:cout<<"一";break; //注意冒号不能是全角或中文的
case 2:cout<<"二";break;
case 3:cout<<"三";break;
case 4:cout<<"四";break;
case 5:cout<<"五";break; //注意冒号不能是全角或中文的
case 6:cout<<"六";break;
case 7:cout<<"七";break; //注意冒号不能是全角或中文的
case 8:cout<<"八";break;
case 9:cout<<"九";break; //注意冒号不能是全角或中文的
case 0:
if ( str[i+1]!='\0' && str[i+1]!='0' )
cout<<"零";break;
}
if ( str[i]!='0' )
switch(len){
case 5:
cout<<"万";break;
case 4:
cout<<"千";break;
case 3:
cout<<"百";break;
case 2:
cout<<"十";break;
case 1:
cout<<" ";break;
}
len--;
}
return 0;
}