[問題] 從struct 印出字串

看板C_and_CPP作者 (Yi)時間6年前 (2017/09/27 21:25), 6年前編輯推噓5(5018)
留言23則, 6人參與, 最新討論串1/2 (看更多)
問題(Question): 我想印出結構中的一個字串,可是卻一直跑出??,非預期的答案 程式碼(Code):(請善用置底文網頁, 記得排版) typedef struct A{ char element[20]; struct QElement* next; }QElement; QElement* head = NULL; QElement* tail = NULL; int main() { char input[] ="ABC"; enq(input); } void enq(char data[]) { QElement* temp = (QElement*)malloc(sizeof(QElement)); temp->element[20] = data; temp->next = NULL; printf("Element: %s is enqueued\n", temp->element); free(temp); } 我預期的結果應該是%s的地方應該是ABC,可是顯示的卻是?? 請問我的觀念錯在哪,請前輩們告知一下 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.247.164.135 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1506518730.A.47B.html

09/27 21:31, , 1F
%s錯 大概90%是沒\0 10%是operator沒搞好
09/27 21:31, 1F

09/27 21:32, , 2F
你的話雖然是\0問題 但是有個更嚴重的錯誤
09/27 21:32, 2F

09/27 21:33, , 3F
你把element*指到&data(char[3])去了....
09/27 21:33, 3F

09/27 21:34, , 4F
請用strcpy做這件事 不要亂指啊....
09/27 21:34, 4F

09/27 21:34, , 5F
(雖然strcpy也會錯就是了 因為data沒有\0)
09/27 21:34, 5F

09/27 21:35, , 6F
剛好四五年前有個實習生水平 放這種雷把系統炸飛了...
09/27 21:35, 6F

09/27 21:35, , 7F
請問element*指到&data(char[3])去了.... 是什麼意思?
09/27 21:35, 7F

09/27 21:39, , 8F
element是char[20] data是char[3] 你把一個char[3]的
09/27 21:39, 8F

09/27 21:40, , 9F
位置送給了一個char[20]的位置 你覺得可以嗎 XD
09/27 21:40, 9F

09/27 21:40, , 10F
另外你的問題只要把data改成const char* data = "ABC";
09/27 21:40, 10F

09/27 21:41, , 11F
\0 加上用strcpy去代替= 應該就沒錯了
09/27 21:41, 11F

09/27 21:41, , 12F
今天假設element跟data都是new來的 你覺得這樣指來指去
09/27 21:41, 12F

09/27 21:41, , 13F
最後delete[] element會怎樣? XD
09/27 21:41, 13F

09/27 23:21, , 14F
矩陣不能用=給,但是結構可以,所以結構裡面有矩陣可以
09/27 23:21, 14F

09/27 23:21, , 15F
=的過去嗎?XD
09/27 23:21, 15F
想另外請教一個問題是如果我想要讓自動填入的字串從"A1"變成"A2"然後填"A3", 這樣要怎麼寫,感覺很簡單可是我想破頭也不知道怎麼做 ※ 編輯: SKTP (27.247.164.135), 09/28/2017 02:00:54

09/28 06:25, , 16F
strncpy + strcat 0
09/28 06:25, 16F

09/28 07:06, , 17F
temp->element[20] = data; 不能達到你的預期
09/28 07:06, 17F

09/28 07:08, , 18F
建議研習一下字串的複製方法,例如strcpy、strncpy
09/28 07:08, 18F

09/28 07:19, , 19F
而且留意,enq()中,temp->element[20]係一段記憶體內容,
09/28 07:19, 19F

09/28 07:22, , 20F
C的=運算子除了基本資料類型外,不能直接複製一段記憶內容
09/28 07:22, 20F

09/28 07:45, , 21F
結構裡面的矩陣要自己實作copy/assign ctor來決定做法
09/28 07:45, 21F

09/28 09:02, , 22F
我到底看了什麼?string copy 不是用 [20] = data
09/28 09:02, 22F

09/28 09:03, , 23F
再者,element[20] 最大只能存取到 element[19]
09/28 09:03, 23F
文章代碼(AID): #1PowRAHx (C_and_CPP)
文章代碼(AID): #1PowRAHx (C_and_CPP)