读书人

一段C程序不知道有关问题在哪里?输出

发布时间: 2013-09-04 10:34:09 作者: rapoo

一段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分配空间。

读书人网 >C语言

热点推荐