看板 C_and_CPP 關於我們 聯絡資訊
各位好 最近在自學C語言 有學長給我了他之前去面試時的考題 不過我們都是程式菜逼八 題目主要為找出程式碼中有錯誤的地方 有些看不太懂哪邊有問題 要煩請各位大大解答了 謝謝 1. void test() { char a[32]; char b[48]; read(0,a,sizeof(a)); strcpy(b,a); } 2. char* fun(); void test { char *buf; int len; buf = fun(); len = strlen(buf); buf[len-1] = '\0'; } 3. int test(char *buffer) { char tmpline[256], *line; if (buffer == NULL) return 0; memset(tmpline, 0, sizeof(tmpline)); line = strncpy(tmpline, buffer, sizeof(tmpline)); if (line == NULL) return 0; line[strlen(line)] = 0; return 1; } 4. typedef struct list { char * next; } list; typedef struct z { list l; } z; void test() { z *x = malloc (sizeof(z)); if (!x) return; x->l.next=1; free(x->l.next); } 5. c假設為>=0的整數 void test() { char *x = “0123456789”; if (c) x = malloc(1); free(x); } 這題run過程式後是free(x)這邊出現error 是因為一開始指標字串x與後面分配的記憶體不一致嗎? 6. int *test(unsigned int n) { int aux; int *p; if (n == 1) { p = &aux; } else { p = (int *)malloc(n * sizeof(int)); } return p; } 此題是否為置底13誡的第5題那樣 在函式中回傳一個指向區域性自動變數的指標會失效? 以上幾題百思不得其解 麻煩各位大大為蔡逼八解惑了 感謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.161.217.80 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1532325512.A.A8E.html
sarafciel: 只丟程式碼誰曉得你的考題是要考什麼東西XD 07/23 14:13
wind137: 抱歉 題目主要是找出一小段程式碼裡面可能邏輯錯的地方 07/23 14:15
※ 編輯: wind137 (118.161.217.80), 07/23/2018 14:16:46
sarafciel: 123都是空字元的問題 str系列函數掃到空字元才會停 07/23 14:43
sarafciel: strn系列則是掃到第n個字元才會停 07/23 14:44
sarafciel: 所以像第一題 如果我在a輸入36個非空字元 07/23 14:45
sarafciel: 在strcpy的時候就會因為掃不到空字元超過邊界 07/23 14:45
sarafciel: 第四題他直接把1塞給next然後再free當然炸掉 07/23 14:50
sarafciel: 第五題c=0時條件式不會進 你就會free到rodata 然後炸掉 07/23 14:52
sarafciel: 第六題就跟你講的一樣 不過指到區域變數的指標不會失效 07/23 14:56
sarafciel: 而是很高機率在執行過程中因為stack增減導致值被蓋掉 07/23 14:57
wind137: 感謝cutekid大大與sarafciel大大的指點! 07/23 16:03