看板 C_and_CPP 關於我們 聯絡資訊
(原文恕刪) vm6jp6rmp4 先生你好,熟讀基本觀念,再來程式實作,對你的幫助更大。我相信你 有這樣做,才會在版上提問。 對於你的問題,我會以你「問的問題」、「讓你懂」、「和別人不一樣的答案」、 「你想看的答案」當作首要目標作答。 這次為了做的徹底,我特別安裝了 Dev C++(我沒在用這東西) 若排版畫面不好看,請各位看官見諒。 我將你的程式修改如下: #include<stdlib.h> #include<stdio.h> #include<string.h> struct node { char *x; int z; }; int main(void) { struct node stud; char *c = "123456"; // strcpy(stud.x,"123456"); //不行 // strcpy(stud.x,c); //不行 // stud.x = c; //可以 stud.x = "我是字串,你好。"; //可以 printf("%s\n", stud.x); system("pause"); return 0; } ---------------------底下是執行結果----------------------------- 我是字串,你好。 請按任意鍵繼續 . . . ---------------------------------------------------------------- 你的程式有錯誤,底下指出來讓你知道: 你定義了一個 struct node,在 main 裡面要宣告時,請用「struct node 名稱」,你 若用「node 名稱」,編譯器不會讓你過的。若你真的不想寫那麼多怎麼辦? 可以,你 這樣寫: typedef struct mynode { char *x; int z; } node; 教你個理解的秘密,typedef struct node 這句等於讓你的編譯器所認識的型態多一種。 本來他只有認識:int、char、float…等等等。 你加了這句後,他會變成:int、char、float、node、double… 有沒有看到你的 node 在裡面了? 所以現在你在 main 這樣寫: 「node 名稱」就不會產生錯誤(因為編譯器已經認得)。 註:怕你「node 名稱」看不懂,依你寫的程式碼「node stud;」裡面的 stud 就是 我講的「名稱」 至於 struct 的寫法,我把 x[] 改成 *x,其中的微妙處,讓你自己體會,若你前面發問 的指標真的有學成,理應能悟得出來。 struct node { char *x; int z; }; 我寫的程式中已經回答了你大部份的問題了。(程式勝過千言萬語) C 語言沒有「字串」這種資料型態,讓初學者百思不得其解,等你跨過它後,你會覺 得一切都如此輕鬆。 現在我反問你,為何「strcpy(stud.x,"123456");」這樣寫不行? 找答案的方向:去看 strcpy 的定義,參數該傳入什麼,函數傳回什麼,看完你就懂了。 這個給你當作練習,練習不一定就只有寫程式。 「依你定出的規格,用 strcpy 去完成是很困難的」。(只要你懂 strcpy 後) (規格在原 po 的發文中有提到,請參考,他要的只是「把字串存入struct中」) 若上面這些你都能懂後,再來就是看看其它熱心版友寫給你的程式,他們的核心 只有一個,就是「malloc」,這是動態配置出記憶體空間的函數。但你要跳到這 一段,還有很長的路要走。 加油,祝福你。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.76.74.145
tomap41017:推這篇 11/05 20:39