C++真是越寫越好玩,今天又發現一個好玩的函式 _tsplitpath_s
這是用來將檔案路徑切分出 磁碟代號 資料夾 檔名 副檔名
先宣告四個字串
TCHAR strDrive[_MAX_DRIVE]; // 磁碟代號
TCHAR strDir[_MAX_DIR]; // 資料夾
TCHAR strFile[_MAX_FNAME]; // 檔名
TCHAR strExt[_MAX_EXT]; // 副檔名
※ _MAX_DRIVE,_MAX_DIR,_MAX_FNAME,_MAX_EXT
是 compiler 決定值
假設 strFilePath 是所有路徑
TCHAR strFilePath; // 所有路徑
_tsplitpath_s(strFilePath, strDrive, _MAX_DRIVE, strDir, _MAX_DIR, \
strFile, _MAX_FNAME, strExt, _MAX_EXT);
就可以切出所有檔案路徑資訊
若有不想要的資訊,假設只要 副檔名 的資訊
_tsplitpath_s(strFilePath, NULL, 0, NULL, 0, \
NULL, 0, strExt, _MAX_EXT);
這樣就解決了
方便吧!
目前分類:C++ (3)
- May 21 Wed 2008 19:51
C++ Windows 上 切割檔案路徑 的公用函式
- Mar 20 Thu 2008 20:58
C++ 兩個類別要互相引用怎麼辦呢?
類別要互相使用彼此偶爾會遇到
但是兩個類別標頭檔案(.h)中互相引用(include)彼此的標頭檔案
在 Visual C++ 2005 中會造成 compiler 不認識彼此類別
這可真是一件頭痛的事,該怎麼辦呢?
有一個方法可以解決,就是在標頭檔案中
告訴 compiler 有外部類別存在
在類別實作檔案(.cpp)中,才引用(include)彼此的標頭檔案
範例:
class A
===== A.h =====
class B;
class A
{
A(B b);
~A();
};
=============
==== A.cpp ====
#include "A.h"
#include "B.h"
A::A(B b)
{
}
A::~A()
{
}
============
class B
===== B.h =====
class A;
class B
{
B(A a);
~B();
};
=============
==== B.cpp ====
#include "B.h"
#include "A.h"
B::B(A a)
{
}
B::~B()
{
}
============
這樣兩個類別就可以互相使用了
- Nov 18 Sun 2007 14:53
C++ 動態配置二維陣列
動態配置二維陣列不外乎都是利用下面這種方式
int i;
int data_height, data_width;
int **data;
p = new int*[data_height];
for(i = 0; i < data_height; i++)
data[i] = new int[data_width];
可惜這種方式在釋放記憶體空間的時候就必須
for(i = 0; i < data_height; i++)
delete [] data[i];
delete [] data;
不是很方便,且不能使用
memset(data[0], 0, sizeof(int)*data_height*data_width);
初始值為 0
以及用 memcpy() 複製值至另一個陣列
因此參考了程式設計俱樂部 記憶體配置問題 此篇文章
改寫原本用 malloc 動態配置二維陣列的方式
使用 new 的方式建立二維陣列
void* new2d(int h, int w, int size)
{
register int i;
void **p;
p = (void**)new char[h*sizeof(void*) + h*w*size];
for(i = 0; i < h; i++)
{
p[i] = ((char *)(p + h)) + i*w*size;
}
return p;
}
因此就可以用這 function
動態建立二維陣列
data = (int **)new2d(data_height, data_width, sizeof(int));
為了增加閱讀方便,以及撰寫程式的方便
在程式前頭增加
#define NEW2D(H, W, TYPE) (TYPE **)new2d(H, W, sizeof(TYPE))
更新記錄:
2011/01/22 01:07
便可簡化剛剛動態配置二維陣列寫法
data = NEW2D(data_height, data_width, int);
此外此種動態配置記憶體的方法在釋放記憶體也比之前寫法方便多
delete [] data;
就可以釋放記憶體