首页 > 试题广场 >

在VC6.0中,运行下面程序的输出结果是( &nbs...

[单选题]
在VC6.0中,运行下面程序的输出结果是()
#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
  • 程序编译错误
  • 程序运行时崩溃
  • 其他几项都不对

发表于 2019-09-27 15:40:30 回复(4)
众所周知,只有形参是要传入的实参的指针和引用才能修改传入实参的值,该处pc只是复制了str。
编辑于 2019-12-10 09:47:59 回复(0)
程序运行 str指向空内存 函数运行pc=str pc也指向空 malloc分配一块内存地址A给pc但没有给str str还是指向空
发表于 2019-09-07 09:09:29 回复(0)
注意:形参char* , 传入的实参也是char*类型,属于值传参,所以并不会改变实参,main中的str没有分配空间,属于野指针(没有开辟内存),对其操作会报错 正确操作: (1)形参为char**,实参为char* (2)形参为引用char* & ,实参为char*
发表于 2021-02-27 06:55:16 回复(0)
形参和实参,函数定义时的参数是形参,函数使用时传入的参数为实参;
实际运行时,要想要改变传入实参的值,需要传入该实参的指针或者引用(地址),修改该地址存储的值以达到修改的目的。
否则,传入的实参仅仅作为该函数域范围内的局部变量,函数结束后,该变量会被清理。
发表于 2021-11-04 20:09:22 回复(0)
把函数改成指针函数,返回一个指针  用str来接收这个指针
编辑于 2021-09-02 10:56:18 回复(0)
要通过参数修改值变量,就要传入值变量的指针。要修改指针变量,就要传入指针变量的指针。
发表于 2022-06-28 13:02:24 回复(0)
发表于 2021-03-25 16:39:41 回复(0)
运行结果:segmentation fault 只是在被调函数申请了空间,是局部的,不能被主调函数使用(主调函数指针是徒有虚名),要用深浅复制说的话属于浅复制 改为: # include<stdio.h> # include<stdlib.h> char* MallocMem( char* pc){ pc=( char*) malloc(100); return pc;} int main(){ char* str= NULL; str=MallocMem( str); strcpy( str," hello"); // strcat( str+7," world"); printf("% s", str); return 0;
编辑于 2019-10-21 20:10:38 回复(0)
str指向NULL,没有分配内存空间,会非法访问,出现段错误
发表于 2023-05-18 16:00:30 回复(0)
可以看看实参和形参指针的地址相不相同就能说明一切,想要该传递二级指针。
发表于 2020-10-27 19:46:28 回复(0)
根据评论改的,在VS里运行了,现在好像不行了
发表于 2022-07-10 16:25:50 回复(2)
发表于 2021-11-25 12:33:18 回复(1)
我的关注点是加入str有正确赋值,那str+2指向的是哪一块。
发表于 2020-11-24 20:04:04 回复(2)
str还是指向NULL,并未给str分配空间,所以执行时会出现段错误。
发表于 2019-08-23 23:01:34 回复(0)
为什么呢
发表于 2019-08-21 08:45:09 回复(4)