[问题] 从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