一段C程序不知道问题在哪里?输出结果不对
#include "stdio.h"
#include "string.h"
//将字符串反转
void convertString(char str[]){
int length = strlen(str);
char ch;
for(int i=0;i<length/2;i++){
ch=str[i];
str[i]=str[length-i-1];
str[length-i-1]=ch;
}
}
//将数字转化为字符串
char * intToString(int n){
char s[11];
int count=0;
while(n>0){
int t=n%10;
s[count++]='0'+t;
n=n/10;
}
s[count]='\0';
convertString(s);
return s;
}
main(){
int num;
scanf("%d",&num);
char * str=intToString(num);
printf("%s\n",str);
}
输入:12345
输出:忐"
我预期的输出结果应该是:54321,不知道为何结果不对,求指教~ C
[解决办法]
问题出在intToString函数上。
该函数声明的char s[11]是自动变量,运行时储存在堆栈上。函数返回之后,该变量就销毁了,所以str实际上指向了一段非法的内存。
有几种方法解决该问题:
1. 给该函数添加一个字符数组参数,使用外部传入的内存完成s的功能。
2. 把s声明为全局变量或静态变量。
3. 使用malloc来替s分配空间。