我寫具有以下動態配置結構的應用:ç未知大小的結構
typedef struct {
char apphash[41];
char filenames_count;
char * filename[64];
} config;
但這個代碼是錯誤的,我無法弄清楚如何將數據從複製和C->文件名[0]正確; c是一個指向配置結構,動態分配的像
config * c = (config *) malloc(42 + 64 * 2) // alloc for 2 filenames. can realloc() later.
它出現segfaults如果我使用類似strcpy(c->filename[0],"file1.txt")
。
有人可以幫助我嗎?
目前,我使用的是直接地址計算,像
strcpy(
(char*)
((unsigned long) c + 42 /* apphash + filenames_count */ +
64 * 0 /* first item */),
"file1.txt"
);
和它的作品當然。
你看,我比C程序員更喜歡程序員,但是我希望這段代碼更加人性化。這段代碼看起來不好,因爲我是C的新手。
哦,我給了一個壞的描述。對不起,那:(
真正的代碼如下所示:
config * c = (config*) malloc(42 + 64 * 2);
// we may realloc() it later if we are going to add more filenames.
// failing example how I do copy one default filename
strcpy(c->filename[0],"file1.txt");
// working example (i386)
strcpy((char*)((unsigned long) c + 42 + 64 * 0),"file1.txt");
我使用完全靜態的結構類型,因爲它會直接從下一次文件加載這就是爲什麼我真的不能使用指針。內部結構,我需要真正的數據被放置在那裏。
我確實檢查所有長度,沒有實際代碼中的BOF,我只是省略了所有這些東西。 。
再次感謝並對不好的問題信息抱歉離子。
我不確定它是否是C標準頭文件的一部分,但請查看'offsetof'來幫助自動計算。 –
你的'strcpy'似乎指向你的一個可能的誤解。 'char * filename [64]'是一個由64個char *組成的數組,不是一個指向'char'數組的指針。你的'64 * 0'似乎表明你認爲它是後者。作爲一個提示,'cdecl'是一個解析C聲明並用簡單的英語將它們描述給你的程序,當你不習慣C語言時它非常有用。http://cdecl.ridiculousfish.com/ –
@unknown_c_newbie甚至未註冊的用戶可以對他們的問題提出更改建議,但是您應該繼續,並將OpenID(或密碼)與您的帳戶相關聯。 – phihag