收录日期:2019/03/21 00:20:58 时间:2016/05/24 08:58:54 标签:C语言
一家通讯公司的面试题目。请问:
(1)这个程序执行后的结果是什么?

(2)在VC 6下怎么修改才能调试通过?





void GetM( char *p)
{
  p=(char *)malloc(100);
}
void Test(void)
{
    char *str= NULL;
GetM(str);
strcpy(str,"Hello zfz!");
printf(str);
}
1、内存非法读
2、

void GetM( char **p)
{
  *p=(char *)malloc(100);
}
void Test(void)
{
    char *str= NULL;
GetM(&str);
strcpy(str,"Hello zfz!");
printf(str);
}
程序出错!

void GetM( char *&p)
{
  p=(char *)malloc(100);
}
同意楼上。
注意传递指针是传递了一个 value 而不是一个 address。
malloc()是包含在什么头文件里?

# include <    >
#include <malloc.h>
我改为如下后仍有两个错误,怎么解决?

LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/zxtxtest.exe : fatal error LNK1120: 1 unresolved externals

# include <stdio.h>
# include <string.h>
# include <malloc.h>
void GetM( char **p)
{
  *p=(char *)malloc(100);
}
void Main(void)
{
    char *str= NULL;
GetM(&str);
strcpy(str,"Hello zfz!");
printf(str);
}
1、#include <stdlib.h> 而不是 <malloc.h>
2、应该是 int main(void) 而不是 void Main(void)
好象是《高质量C++编程》中的题
在VC下运行还是有错!怎么解决?

# include <stdio.h>
# include <string.h>
# include <malloc.h>
void GetM( char **p)
{
  *p=(char *)malloc(100);
}
int Main(void)
{
    char *str= NULL;
GetM(&str);
strcpy(str,"Hello zfz!");
printf(str);
//return (0);
}
你的Main用大写不对,吧, return 0为什么注销了, 
内存也有泄漏啊。
致:Wolf0403
vc下包含malloc.h是可以的,当然stdlib也可以
什么时候才能找到一个能让我考试的公司啊!

哪个公司考这么好的简单的问题啊,

我碰到的都是问的bt问题,
不是bt难,
就是bt简单,比这个简单太多了,让我怀疑只是随便打发我吧了,
void GetM( char **p)
{
  *p=(char *)malloc(100);
}
void Test(void)
{
    char *str= NULL;
    GetM(&str);
    strcpy(str,"Hello zfz!");
    printf(str);
    delete []str;
}

如果是纯粹的编译运行,上面的代码应该是正确的~ ,加上main 函数就可以
如下:
#include<iostream.h>
#include<stdio.h>
#include<malloc.h>

void GetM( char **p)
{
  *p=(char *)malloc(100);
}
void Test(void)
{
    char *str= NULL;
    GetM(&str);
    strcpy(str,"Hello zfz!");
    printf(str);
    delete []str;
}

main()
{
    Test();
}

我已经编译运行  结果是正确的
路过

帮忙顶一下
高质量C++编程P47:如果函数参数是指针,别指望它能申请动态内存。
main的M好像是不能大写的吧?
区分大小写的,这样的话会造成找不到main函数的
malloc.h好像就是包含在<malloc.h>的,不是在<stdlib.h>里面吧?
能编译通过的代码如下(Main.cpp):
#include <stdlib.h>  // malloc need it
#include <malloc.h>  // malloc need it
#include <string.h>  // strcpy need it
#include <stdio.h>   // printf need it

void GetM( char *p)
{
  p=(char *)malloc(100);
}
void Test(void)
{
    char *str= NULL;
GetM(str);
strcpy(str,"Hello zfz!");
printf(str);
}

int main(void)
{
    Test();
}


编译方法如下:

D:\1> cl Main.cpp -o main.exe
Main.cpp
Main.cpp(21) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/out:Main.exe 
/out:main.exe 
Main.obj 

这个题主要是靠C语言的知识。就是C只有传值不传址。不向PASCAL,可以传值也可以传址(VAR)。通信公司主要是使用C,而不是C++。如果要修改这个问题,可以通过传地址的地址(上面已经有朋友给出解决代码)。如果你是C++程序员,还可以把函数:
void GetM( char *p);
修改为:
void GetM( char *&p);

也就是利用引用(相当于PASCAL中的VAR了)。

C语言还是有许多陷阱的,如果你了解了C语言陷阱,就可以发现这些问题。关于C语言陷阱,有专门的一本书谈这个问题,有机会你找来学习学习。GOOD LUCK!
mark
mark~~~~~~~~~~~
#include "stdlib.h"
#include "stdio.h"
#include "string.h"

void GetM( char **p)
{
 *p=(char *)malloc(100);
  
}
void test(void)
{
    char *str= NULL,*str1=NULL;
GetM(&str);

strcpy(str,"Hello zfz!");
printf(str);

}
void main ()
{
 test();
 }
VC6.0下调试通过,没有问题
# include <stdio.h>
# include <string.h>
# include <malloc.h>
void GetM( char **p)
{
  *p=(char *)malloc(100);
}
void main(void)
{
    char *str= NULL;
GetM(&str);//指向指针的指针
strcpy(str,"Hello zfz!");
printf(str);
}

给沧海冷心的100分 sql编程求助 如何能去掉Button控件的边框线及虚线? ADO.NET高手请指教 寻找 指点迷经关于数据库备份、数据导入出等的编程 欢迎大家加入这个群讨论1528647 我在用Checklistbox当内容过多时,怎样让它自动出现右边滚动条.急... 在vs.net2003中using System.Windows时没有Windows类怎么办? 图片转换成PDF怎么写??(急急急) 怎样将图片转换成PDF文件?? SQL按多个字段排序问题 在与mysql链接时出错! 有没见过这种现象? ACCESS数据库中如何保存图片 一个农民工的百日生存状态实录 弱问::用WSAEventSelect模型的客户端怎么激发一个FD_WRITE?? 如何选取表中符合某个条件的第n条到第n+m条记录? 让人和猪都很感动的广告---------(千万别昏倒) 麻烦帮我看看为什么? win2000高级服务器版!怪问题!在线等候!....... 急需Delphi 5.0,请给小弟提供下载地址!! 一个小问题,呵呵 菜鸟也散分,Office低级扫盲问题! 都已经是大3的人了,可前途还是那么迷雾朦朦 微软,我对不起你——一个盗版用户的真情告白  今天的10分刚送出,没分也问  SOS!!!!!!!向所有网民求助!!!! 献给记者节:2003年中国记者风云人物大盘点 电信的小姐