[問題] 從struct 印出字串

作者: SKTP (SKTP)   2017-09-27 21:25:27
問題(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,可是顯示的卻是??
請問我的觀念錯在哪,請前輩們告知一下
作者: Killercat (殺人貓™)   2017-09-27 21:31:00
%s錯 大概90%是沒\0 10%是operator沒搞好你的話雖然是\0問題 但是有個更嚴重的錯誤你把element*指到&data(char[3])去了....請用strcpy做這件事 不要亂指啊....(雖然strcpy也會錯就是了 因為data沒有\0)剛好四五年前有個實習生水平 放這種雷把系統炸飛了...
作者: SKTP (SKTP)   2017-09-27 21:35:00
請問element*指到&data(char[3])去了.... 是什麼意思?
作者: Killercat (殺人貓™)   2017-09-27 21:39:00
element是char[20] data是char[3] 你把一個char[3]的位置送給了一個char[20]的位置 你覺得可以嗎 XD另外你的問題只要把data改成const char* data = "ABC";\0 加上用strcpy去代替= 應該就沒錯了今天假設element跟data都是new來的 你覺得這樣指來指去最後delete[] element會怎樣? XD
作者: peterwu4 (notd)   2017-09-27 23:21:00
矩陣不能用=給,但是結構可以,所以結構裡面有矩陣可以=的過去嗎?XD
作者: IhateOGC (我討厭)   2017-09-28 06:25:00
strncpy + strcat 0
作者: jimfan (jimfan)   2017-09-28 07:06:00
temp->element[20] = data; 不能達到你的預期建議研習一下字串的複製方法,例如strcpy、strncpy而且留意,enq()中,temp->element[20]係一段記憶體內容,C的=運算子除了基本資料類型外,不能直接複製一段記憶內容
作者: Killercat (殺人貓™)   2017-09-28 07:45:00
結構裡面的矩陣要自己實作copy/assign ctor來決定做法
作者: dou0228 (7777)   2017-09-28 09:02:00
我到底看了什麼?string copy 不是用 [20] = data再者,element[20] 最大只能存取到 element[19]

Links booklink

Contact Us: admin [ a t ] ucptt.com