發表文章

目前顯示的是 一月, 2014的文章

Char *ptr 與 strtok(char *des,const char *) 的問題。

Strtok( )是一個在string.h 內的function 用來傳入一個字串跟你要用來辨識分割的符號,strtok就會從字串頭開始一個一個收尋,找到要分割的符號就會把符號改成"\0",所以只要一直呼叫可以切割一個大字串成數個小字串。

EX:"I am Clover"=> 用空白分割一直呼叫(詳細請自己看宣告)切出三個字串為"I","am","Clover".

但是一旦你的來源是用下面方式直接建立的:

EX char  *target = "I am  clover.";

則會無法使用此Function,後來在Stack flow才找到原因!這個原因一般程式的書幾乎
不會提到!其原因是當我們使用 char *ptr去initial 一個字串時,系統會分配一個不能modify的空間放這個字串,但是由於strtok會去修改其記憶體內容因此會導致編譯過程不會有任何error但是Run的時候會出現Segment fault的問題。要注意喔 XD

Struct內宣告指標。

這東西真的會忘記,改寫公司的LCD2USB程式的時候想說使用Struct + malloc來實做

動態device被移除或是插入時抓Database內的資料陣列。然後很天真的在Struct內宣告

兩個字元指標 Char *str1,*str2; 然後malloc去生一堆出來做link list後給定指標的字串,

然後發現怎麼每個Struct的指標值都一樣?找了一下才發現原來使用malloc去生的Struct

內如果memeber是Char *ptr 系統只會讓每個指標指到一塊相同的記憶體.......所以要就是

裡面放正常的陣列,要不就是malloc Struct 後還要自己malloc每個Struct內的指標,免得

到時候Assign出問題啊 XD

typedef+struct+malloc link-list

說真的自己是學C++但是有些C的觀念不是很清楚有點忘記了!所以這次把typedef+struct+malloc做Link-list簡單紀錄一下免得以後又忘記了。 老人家腦袋記不得那麼多東西了。

使用typedef但是要在struct內做個同類型的pointer做link-list用:

typedef struct mainmenu
{
int id;
char *name;
struct mainmenu *forw,*back;
}Main_Menu;

int main()
{
Main_Menu *ptr,*now,*head;
int index=0;
ptr=( Main_Menu *)malloc(sizeof( Main_Menu));
ptr->forw=NULL;
ptr->back=NULL;
head=ptr;
for(index=0;index<10 b="" index="">
{
now=( Main_Menu *)malloc(sizeof( Main_Menu));
                .....................
}

return 0;

}
------------------------------------------------------------------------------------------- 不使用typedef : struct Main_Menu { int id; char *name; struct Main_Menu *forw,*back; };
int main() { structMain_Menu *ptr,*now,*head; int index=0;
ptr=(struct Main_Menu *)malloc(sizeof(struct Main_Menu)); ptr->forw=NULL; ptr->back=NULL; head=ptr; for(index=0;index<10 b="" index=""> { now=(struct Main_Menu *)malloc(sizeof(struct Main_Menu));                .....................…