推 tomap41017:推這篇 11/05 20:39
(原文恕刪)
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