首页 > 试题广场 >

下面程序的输出结果是( &n...

[单选题]
下面程序的输出结果是(      )
#include <stdio.h>
#include <stdlib.h>
void MallocMem(char* pc)
{
pc = (char*) malloc (100);

return;
}

int main()
{
char *str=NULL;

MallocMem(str);
strcpy(str,"hello ");
strcat(str+2, "world");

printf("%s",str);

return 0;
}
  • hello world
  • 程序编译错误
  • 程序运行时崩溃
  • 其他几项都不对
最开始str指向空,进入函数 MallocMem() 后 pc = (char*) malloc (100); 这句可以理解为在修改指针的指向,赋予了它一个新地址,但是参数在传递时,永远是值传递,在子函数中对参数做修改并不会影响主函数,函数调用结束后,str还是指向空,所以后面对这个指针的操作就会造成程序崩溃,当我们希望改变指针时,应该传入一个二级指针。不过这片空间在MallocMem调用结束后会不会回收我就不知道了,我是菜鸡🤔
void MallocMem(char** pc)
{
	*pc = (char*) malloc (100);

	return;
}

int main()
{
	char *str=NULL;

	MallocMem(&str);
	strcpy(str,"hello ");
	strcat(str+2, "world");

	printf("%s",str);

	return 0;
}

发表于 2019-09-25 09:18:13 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstring>
void MallocMem(char *pc)
{
    pc = (char*) malloc (100);
    return ;
}

int main()
{
    char *str=NULL;
    MallocMem(str);
    strcpy(str,"hello");
    printf("%s",str);
    return 0;
}
这道题目其实感觉有点隐蔽,其实这个地址值的传递,pc=str,但是函数结束之后pc就被销毁,str的值并没有改变,因此运行程序会崩溃。
发表于 2019-08-29 19:29:55 回复(0)