改错题,只能在原来的基础上增加代码,不能删除代码
#include <stdio.h>
#include <malloc.h>
void foo(int age,char *b)
{
b = (char *)malloc(64);
sprintf(b,"Your Age is %d",age);
}
int main()
{
char *f;
foo(23,f);
printf("%s\n",f);
}
错误原因:
编译过程中,编译器对参数b制作副本_b,foo函数中申请内存后,其内存地址被赋给的是_b,而不是指针b。foo(23,f)函数运行一遍后实参f的内容没有产生任何变化,即没有指向函数内分配得到内存的地址。对指针f所指内容进行打印肯定出现错误,因为指针f没有指向任何内容。
这个问题考察的是
在函数内部分配内存,欲通过指针参数返回分配得到的内存,如何实现?
上述改错题的解答答案如下:
#include <stdio.h>
#include <malloc.h>
void foo(int age,char **b)
{
*b = (char *)malloc(64);
sprintf(*b,"Your Age is %d",age);
}
int main()
{
char *f = NULL;
foo(23,&f);
printf("%s\n",&f);
return 0;
}
#include <stdio.h>
#include <malloc.h>
void foo(int age,char *b)
{
b = (char *)malloc(64);
sprintf(b,"Your Age is %d",age);
}
int main()
{
char *f;
foo(23,f);
printf("%s\n",f);
}
错误原因:
编译过程中,编译器对参数b制作副本_b,foo函数中申请内存后,其内存地址被赋给的是_b,而不是指针b。foo(23,f)函数运行一遍后实参f的内容没有产生任何变化,即没有指向函数内分配得到内存的地址。对指针f所指内容进行打印肯定出现错误,因为指针f没有指向任何内容。
这个问题考察的是
在函数内部分配内存,欲通过指针参数返回分配得到的内存,如何实现?
上述改错题的解答答案如下:
#include <stdio.h>
#include <malloc.h>
void foo(int age,char **b)
{
*b = (char *)malloc(64);
sprintf(*b,"Your Age is %d",age);
}
int main()
{
char *f = NULL;
foo(23,&f);
printf("%s\n",&f);
return 0;
}
回复Comments
{commenttime}{commentauthor}
{CommentUrl}
{commentcontent}