Chinaunix
标题:
函数的返回值为字符串时该如何处理?
[打印本页]
作者:
mcmay
时间:
2005-10-03 00:23
标题:
函数的返回值为字符串时该如何处理?
做了一个将输入的正整数转化二进制数的函数但字符串作为返回值返回到调用函数中时却出错,下面是代码,谢谢大家指正!在TC20下编译的,使用了clrscr()了。
/*Positive interger to binary code*/
#include<stdio.h>;
#include<conio.h>;
#include<string.h>;
char binary(int b){
int i,j;
char str[32],*pstr=&str[0],temp;
for(i=0;i<32;i++)
str
=0;
while(b>;0){
if(b%2==0)
*pstr='0';
if(b%2==1)
*pstr='1';
b/=2;
pstr++;
}
for(i=0,j=strlen(str)-1;i<j;i++,j--){
temp=str
;
str
=str[j];
str[j]=temp;
}
return *str;
}
int startup(void){
int a,flag=1;
char ch;
while(flag){
clrscr();
printf("\nEnter a choice: "
;
printf("\n(1) Exit\t(2) Continue\n"
;
ch=getch();
if(ch=='1'){
clrscr();
printf("\nBye!\n"
;
getch();
flag=0;
}
else if(ch=='2'){
clrscr();
printf("\nInput a positive integer: "
;
scanf("%d",&a);
printf("\nThe binary code for this positive integer is %s", binary(a));
getch();
}
else{
printf("\nError Input! Press any key to input again.\n"
;
getch();
startup();
}
}
return 0;
}
int main(void){
startup();
return 0;
}[code][/code]
作者:
renstone921
时间:
2005-10-03 00:48
标题:
函数的返回值为字符串时该如何处理?
没仔细看
但看到
char str[32]
........
return *str;
就感觉不对劲了。你的函数的功能,是返回str字符串的首个字符,不过这估计不是你想要得。
出现错误是由于变量的生存期和作用域引起的。
char binary(int b){
int i,j;
char str[32]
这里str是一个局部自动字符数组,他的作用域限制在binary函数范围内,由binary函数返回时,他会被销毁,数据也就无效了,如果你的转换算法没错的话,这就是引起错误的原因了。
解决办法,就是
1。全局变量
2。在堆中动态分配,malloc-free函数对
3. 修改binary函数的接口,在startup分配字符数组,然后作为参数传递给binary函数,并在binary函数中用转换结果填充它
三种办法,
第一种:
在startup函数里面定义str字符数组,然后,把它作为参数传递给binary函数。
即binary函数应当定义成
void binary(int value, char buf[])
{
...
填充buf
}
int startup(void)
{
char result[33];
....
binary(value, result); //调用结束后,result字符数组内应当填充转换后的字符串。
//输出转换结果。
}
另一种,binary 返回char*
即
char* binary(int value)
{
char* str = (char *)malloc(32 + 1);
//转换成字符串,注意字符串是以'\0'结尾的。
return str; //返回指针。
}
然后
int startup(void){
....
char* result = NULL;
...
result = binary(value);
printf("The converted result is %s\n", result);
//然后别忘了
free(result); //释放动态分配的存储空间。
..............
}
最后一种
将char str[32]定义成全局数组。
作者:
mcmay
时间:
2005-10-03 01:09
标题:
函数的返回值为字符串时该如何处理?
不是完全看懂,是我自己知识有限,但最后一种解决方案看来我可以用的,谢谢了!希望继续得到你的帮助!
作者:
mcmay
时间:
2005-10-03 01:16
标题:
函数的返回值为字符串时该如何处理?
/*Positive interger to binary code*/
#include<stdio.h>;
#include<conio.h>;
#include<string.h>;
char str[32];
char binary(int b){
int i,j;
char *pstr=&str[0],temp;
for(i=0;i<32;i++)
str
=0;
while(b>;0){
if(b%2==0)
*pstr='0';
if(b%2==1)
*pstr='1';
b/=2;
pstr++;
}
for(i=0,j=strlen(str)-1;i<j;i++,j--){
temp=str
;
str
=str[j];
str[j]=temp;
}
return str;
}
int startup(void){
int a,flag=1;
char ch;
while(flag){
clrscr();
printf("\nEnter a choice: "
;
printf("\n(1) Exit\t(2) Continue\n"
;
ch=getch();
if(ch=='1'){
clrscr();
printf("\nBye!\n"
;
getch();
flag=0;
}
else if(ch=='2'){
clrscr();
printf("\nInput a positive integer: "
;
scanf("%d",&a);
printf("\nThe binary code for this positive integer is %s", binary(a));
getch();
}
else{
printf("\nError Input! Press any key to input again.\n"
;
getch();
startup();
}
}
return 0;
}
int main(void){
startup();
return 0;
}
[/code]
作者:
renstone921
时间:
2005-10-03 01:32
标题:
函数的返回值为字符串时该如何处理?
我手头没有tc,所以大致改了一下,还是换个borland c++5.5或者vc,还有dev-c++吧,16位的东西,现在比较少用
#include<stdio.h>;
/* #include<conio.h>; */
#include<string.h>;
char str[32];
char binary(int b){
int i,j;
char *pstr=&str[0],temp;
for(i=0;i<32;i++)
str[i]=0;
while(b>;0){
if(b%2==0)
*pstr='0';
if(b%2==1)
*pstr='1';
b/=2;
pstr++;
}
for(i=0,j=strlen(str)-1;i<j;i++,j--){
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
return 0;
}
int startup(void){
int a,flag=1;
char ch;
while(flag){
/* clrscr(); */
printf("\nEnter a choice: ");
printf("\n(1) Exit\t(2) Continue\n");
ch=getchar();
if(ch=='1'){
/* clrscr(); */
printf("\nBye!\n");
getchar();
flag=0;
}
else if(ch=='2'){
/* clrscr(); */
printf("\nInput a positive integer: ");
scanf("%d",&a);
binary(a); //就是这里,填充全局变量。执行完毕后,str里面是转换后的字符串
printf("\nThe binary code for this positive integer is %s", str);
getchar();
}
else{
printf("\nError Input! Press any key to input again.\n");
getchar();
startup();
}
}
return 0;
}
int main(void){
startup();
return 0;
}
复制代码
作者:
mcmay
时间:
2005-10-03 01:50
标题:
函数的返回值为字符串时该如何处理?
楼上的代码我在Dev_C++中编译通过了,可以达到预期效果,谢谢。再请问关于“填充”的知识不知从哪儿可以了解更多?
作者:
renstone921
时间:
2005-10-03 02:00
标题:
函数的返回值为字符串时该如何处理?
没什么可看得,就是变量的生存期和作用域、还有一点关于数组的问题。多看几遍书吧,把书上的例子是运行调试以下。所谓的‘填充’只不过是数组元素赋值操作。
作者:
mcmay
时间:
2005-10-03 02:56
标题:
函数的返回值为字符串时该如何处理?
楼上老兄的经验之谈很有用啊,学习中...
作者:
mq110
时间:
2005-10-03 06:00
标题:
函数的返回值为字符串时该如何处理?
转换成2进制这么做多麻烦.用位运算就好..
况且这么写 都没考虑负数的情况.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2