設定 EYNY 為首頁  |  加入我的最愛
伊莉討論區
熱門搜尋: 無聲火  海角七號  范逸臣  蒼井空  國境之南  與敵同行  arashi  愛田由 


休閒聊天
學術文化
感情感性
興趣交流
家庭事務
旅遊交流
飲食交流
家族門派
貼圖分享
動漫交流
音樂世界
美容打扮
潮流資訊
影視娛樂
電玩遊戲
連線遊戲
網絡遊戲
交易廣場
下載分享
BT下載區
CB下載區
電腦資訊
數碼產品
手機交流
網站事務
體育運動
時事新聞
上班一族
博彩娛樂
成人話題


 
標題: [求助] 可以幫我偵錯一下嗎
love761222

Rank: 1
幼兒生(0/200)
潛水  
UID 2890563
精華 0
積分 96
帖子 58
潛水 3102 米
閱讀權限 10
註冊 2007-11-30
發表於 2008-1-3 03:09 AM  資料 文集 短消息 
伊莉部落格伊莉交友伊莉聊天伊莉相簿

可以幫我偵錯一下嗎

[顯示] [隱藏]
可以幫我看哪裡有錯嗎?
該怎麼改呢?
感激不盡~

#include <stdio.h>
void main(void) {
struct dnode{
struct studscore{
char *name;
char *number;
char sex;
int score;
}s;
struct dnode *LLINK, *RLINK; }
*head, *tail, *tmp, *temp;
/* insert data */
tmp = (struct dnode *) malloc(sizeof(struct dnode));
tmp->LLINK = tmp->RLINK = NULL;
tmp->s.name = (char *) malloc(3*sizeof(char));
strcpy(tmp->s.name, "鐘央");
tmp->s.number = (char *) malloc(4*sizeof(char));
strcpy(tmp->s.number, "S01");
tmp->s.sex = 'M';
tmp->s.score = 100;
head = tail = tmp;
/* 插前面 */
tmp = (struct dnode *) malloc(sizeof(struct dnode));
tmp->LLINK = NULL;
tmp->RLINK = head;
head->LLINK = tmp;
head = tmp;
tmp->s.name = (char *) malloc(3*sizeof(char));
strcpy(tmp->s.name, "錢面");
tmp->s.number = (char *) malloc(4*sizeof(char));
strcpy(tmp->s.number, "S02");
tmp->s.sex = 'F';
tmp->s.score = 99;
/* 插後面 */
tmp = (struct dnode *) malloc(sizeof(struct dnode));
tail->RLINK = tmp;
tmp->LLINK = tail;
tmp->RLINK = NULL;
tail = tmp;
tmp->s.name = (char *) malloc(3*sizeof(char));
strcpy(tmp->s.name, "候面");
tmp->s.number = (char *) malloc(4*sizeof(char));
strcpy(tmp->s.number, "S03");
tmp->s.sex = 'F';
tmp->s.score = 99;
/* 插在'鐘央'之前面 */
temp = head;
while (temp) {
if (!strcmp(temp->s.name, "鐘央")) break;
temp = temp->RLINK;
}
tmp = (struct dnode *) malloc(sizeof(struct dnode));
tmp->LLINK = NULL;
tmp->RLINK = temp;
head->LLINK = tmp;
head = tmp;
tmp->s.name = (char *) malloc(3*sizeof(char));
strcpy(tmp->s.name, "鐘前");
tmp->s.number = (char *) malloc(4*sizeof(char));
strcpy(tmp->s.number, "S02");
tmp->s.sex = 'M';
tmp->s.score = 69;
/* 插在'鐘央'之後面 */
tmp = (struct dnode *) malloc(sizeof(struct dnode));
tail->RLINK = tmp;
tmp->LLINK = tail;
tmp->RLINK = NULL;
tail = tmp;
tmp->s.name = (char *) malloc(3*sizeof(char));
strcpy(tmp->s.name, "鐘後");
tmp->s.number = (char *) malloc(4*sizeof(char));
strcpy(tmp->s.number, "S03");
tm [color=blue][size=2][ [u]瀏覽完整內容請先註冊或登入會員[/u]。][/size][/color]

頂部
flylinux

Rank: 1
幼兒生(0/200)
潛水  
UID 931155
精華 0
積分 121
帖子 19
潛水 325 米
閱讀權限 10
註冊 2007-3-14
發表於 2008-1-3 01:44 PM  資料 主頁 文集 短消息 
維克斯討論區

編譯沒有錯!
你的問題是什麼要說明才能幫你看哪裡有錯!


ㄚ琪琪的家
http://job.achi.idv.tw
頂部
oisiyasan

Rank: 1
幼兒生(0/200)
潛水  
UID 2073302
精華 1
積分 157
帖子 126
潛水 639 米
閱讀權限 10
註冊 2007-8-12
發表於 2008-1-4 08:57 AM  資料 文集 短消息 
維克斯討論區

我想你應該要說
你的預期輸出結果為何
這樣方便他人幫您debug

頂部
trumpetkuo

Rank: 1
幼兒生(0/200)
潛水  
UID 295062
精華 0
積分 99
帖子 67
潛水 16 米
閱讀權限 10
註冊 2006-10-4
發表於 2008-1-5 11:21 PM  資料 文集 短消息 
伊莉部落格伊莉交友伊莉聊天伊莉相簿

我把看到的問題先提一下 , 方便你找..

(1) 這個不問題,但是會讓的CODE好看一點...
      把宣告寫在外面,並且分開,, 又不是要考倒別人,, 好看最重要..
      你寫成這樣真的看沒有, 吃力的粉..

(2) 問題來了
tmp->s.name = (char *) malloc(3*sizeof(char));
strcpy(tmp->s.name, "錢面");       // "前面"才對吧
重點是 一個中文字是佔兩個char空間, 但是字串不是這樣處理的..兄弟...
字串結束還有一個字元.. 所以若是中文 你要有(字數*2)+1的空間...
你先試試吧

頂部
brightwang
該用戶已被刪除









發表於 2008-1-10 02:11 PM 
維克斯討論區

建議把
struct studscore{
char *name;
char *number;
char sex;
int score;
}s;
改成
#define MAX_NAME_LEN 8
#MAX_NUM_LEN 8
struct studscore{
char name[MAX_NAME_LEN+1];
char number[MAX_NUM_LEN+1];
char sex;
int score;
}s;
先定好允許輸入人名最大長度,如只允許最多4個中文字,所以事先要配置4X2+1=9個char給name,
這樣事後處理name就不用擔心不夠放,之後也不會煩惱malloc和free的問題,
缺點是會讓浪費一點記憶空間和使用者輸入端要防呆..

頂部
 




當前時區 GMT+8, 現在時間是 2008-10-14 03:14 AM

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.079228 second(s), 6 queries , Gzip enabled

清除 Cookies - 聯繫我們 - 廣告查詢 [威旭代理] - 伊莉討論區 - Archiver
重要聲明:本討論區是以即時上載留言的方式運作,伊莉討論區對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。伊莉討論區有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。