4
爲什麼數組c初始化
static char *opcode_str[] = { "DATA"
, "DATA_REQUEST_ACK"
, "ACK_TIMER_EXPIRED"
, "ACK_UNEXPECTED_SEQ"
, "ACK_AS_REQUESTED"
} ;
工作,但
static char **opcode_str = { "DATA"
, "DATA_REQUEST_ACK"
, "ACK_TIMER_EXPIRED"
, "ACK_UNEXPECTED_SEQ"
, "ACK_AS_REQUESTED"
} ;
失敗SEGV時opcode_str [0] printf'd?
我認爲這是因爲第二個列表沒有爲指針的五個元素數組分配內存,但我需要更全面的解釋。
一切順利,
克里斯。
謝謝。爲什麼在編譯時或指針初始化時不會失敗? – fadedbee 2010-05-06 14:36:36
@chrisdew它是未定義的行爲,違反了C中的語義規則。違反的規則是*標量的初始值設定項應該是一個單獨的表達式,可選地用大括號括起來*但是,您有多個表達式括在花括號中。 – 2010-05-06 14:37:52
就是這樣,我會讓警告從我的屏幕上滾動。衛生署! 我現在可以看到,我將char **指針設置爲char *指向「DATA」的值。然後評估「DATA」,就好像這四個/八個字節持有一個指針並且這引起了段錯誤。 – fadedbee 2010-05-06 14:44:32