首页
社区
课程
招聘
[求助]关于VC++ 中的二个问题!!!
发表于: 2008-7-21 05:28 6326

[求助]关于VC++ 中的二个问题!!!

2008-7-21 05:28
6326
刚学 VC++, 有很多地方无明, 请大家帮下

1 :如何看 VC++ 的内部函数的源代码,如 _splitpath   

2 :如何在VC++ 中定义一个内部函数, 如:

delphi 中定义一个内部函数是:

// 取包含路径的文件名, 如 FileName 是 C:\WINDOWS\123.exe   返回 123.exe.
function ExtractFileName(const FileName: string): string;  // 最后的一个是返回值
var
  I: Integer;
begin
  I := LastDelimiter(PathDelim + DriveDelim, FileName);
  Result := Copy(FileName, I + 1, MaxInt); //返回值
end;

如果在 VC++  声明上面的 ExtractFileName 函数,返回值是 char *的吧:

#include <windows.h>
#include <stdio.h>
#include <string>
using namespace std;

HWND hwnd;

LRESULT CALLBACK WindowProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam);
char * ExtractFileName(char *FileName);  // 自定义的过程函数, 返回值不知如何定义
void MyProcedure();  // 自定义的过程

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//
        ExtractFileName("C:\\Program Files\\KuGou\\KuGou2008\\KuGoo.exe");
        return 0;
}

LRESULT CALLBACK WindowProc(HWND Winhwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   //
}

char * ExtractFileName(char *FilePath)   // 不知如何定义返回值
{
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
  _splitpath(FilePath, drive, dir, fname, ext );
  strncat(fname, ext, strlen(ext));
        return fname;
}

void MyProcedure()
{       
}

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
2
  1、每个内部提供的函数都有相应的头文件(*.h),在头文件中定义了函数的原型。
  2、定义一个函数要先申明函数的原型,才能使用此函数:
   char * ExtractFileName(char *FilePath); //函数申明
      char *ExtractFileName(char *FilePath) //函数实现
         {
                ....//函数实体
         }
          前面的 char *就是指明了函数的返回值为字串指针。
2008-7-21 09:22
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
谢谢!!!!!!!!!!!
我再试试!!!!
我当时也像上面的一样申明函数, 但编译器说返回值***

char * ExtractFileName(char *FilePath)   // 不知如何定义返回值
{
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
  _splitpath(FilePath, drive, dir, fname, ext );
  strncat(fname, ext, strlen(ext));
  return fname; //是这样反回吗?
}
2008-7-21 13:22
0
雪    币: 256
活跃值: (673)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
如果你要返回局部的,定义成指针变量试试.
2008-7-21 13:54
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
不是,你应该返回 FilePath中的指针,而不是返回临时变量的指针

char* ExtractFileName(char* szfilename)
{
    char* psrc=strrchr(szfilename,'\\');
  return (psrc?psrc+1:NULL);
}
2008-7-21 14:00
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
谢谢大家的帮助!!!

还有, psrc? 中的“?”代表什么意思?
       psrc+1:NULL    又代表什么意思?

1、每个内部提供的函数都有相应的头文件(*.h),在头文件中定义了函数的原型。
   但没有实现(_splitpath)的源代码啊?
2008-7-21 16:17
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
char* ExtractFileName(char* szfilename)
{
    char* psrc=strrchr(szfilename,'\\');
  return psrc+1;  //    这样返回的字符串没有  '\0' 结尾吗?如果是,如何在VC++查看
}
2008-7-21 16:32
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
8
NULL就是空, XX?aa:bb相当于
  if(XX){ aa;}else{bb;}
建议楼主先去看看C++基本教程了再说吧,这些是最基本的运算表达式。
2008-7-23 11:13
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
你这样是不安全的,因为szfilename可能没有斜杠,所以必须判断一下psrc的有效性
2008-7-23 13:19
0
游客
登录 | 注册 方可回帖
返回
//