收录日期:2019/01/17 21:43:30 时间: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);
}

执行jsp出现所有的源代码? 请替我看一下这几个错误~谢谢:) 怎样用command方式执行控制面板的功能 日期型和文本型数据 如何在wml文件中播放声音? 高价求够Notes OA源代码 急死我了,请问哪位兄弟有自己设计的FTP上传下载的小程序!!! 怎么指定动态库所在的路径呢? 感情问题?大家出出主意! 请各位高手看一下这个函数错在哪里?请指正一下 请教 如何建立一个复杂的VIEW 可以用sendmessage修改其他程序的自定义属性吗? 关于TDBGrid的菜鸟问题!大家都进来帮帮我啊!拜托~~~~ 比较困难的实验型算法 好人一生平安!!!(asp与word)!!!!!急!急!!急!!! 怎样增加动态建立数据窗口的update属性?? 高手请进来。高分悬赏。 请问高手:2000中得虚拟内存和交换文件又什么区别和联系? 为什么我连接局域网中的SQL Server2000?? 一个grant的小问题,请大家帮助一下。 dataView update 到數據庫 按下TAB键对应的是哪个消息? 你们的女朋友是怎样认识的? 用alias定义的别名怎么取消? 终于累了 C#怎样弹出一个目录树? 如何在vbs中调用js中的变量? 请问Project98的CDKEY?在线等待! 很简单的问题 关于*p++ 和++*p