2011-11-08 21 views
0

我有一個結構定義爲鑄字的argv到結構型

struct xyz { 

    char *str; 
    int x; 
    int y; 
}; 

對此我從其他程序1獲得作爲輸入參數的可執行文件。(其它程序做了program2execve與輸入參數此結構)。

我想知道,我可以做這個輸入參數的類型爲(struct xyz*)argv[1];,或者我必須在發送它之前將其轉換爲字符串格式?

+1

愚蠢的問題:你試過了嗎?它是否按預期行事? –

回答

4

您不能以任何方式將任意數據傳遞到命令。您必須將其序列化爲一個字符串,或執行一些IPC(例如通過管道/套接字)。

原因是這些字符串是空終止的。您的char*成員最終會有一個\0,即使不是,小於16843009(0x01010101)的任何int都將具有空字節,並且無法正確複製。

+1

請注意,大於該數字的整數也可以具有空字節。 –

+0

沒錯。 '0x7FFFFF00'仍然會把它搞砸了! – Polynomial

+0

您還需要一種方法來確定命令行中的字符串結束並開始編號。 –

0

argv [1]是一個字符串。你不能將一個字符串轉換爲結構體。你需要創建自己的包裝函數來進行序列化和解析,然後注意各種問題 - 端到端問題和編碼問題(使用Unicode的寬字符等)