我有一個結構定義爲鑄字的argv到結構型
struct xyz {
char *str;
int x;
int y;
};
對此我從其他程序1獲得作爲輸入參數的可執行文件。(其它程序做了program2
的execve
與輸入參數此結構)。
我想知道,我可以做這個輸入參數的類型爲(struct xyz*)argv[1];
,或者我必須在發送它之前將其轉換爲字符串格式?
我有一個結構定義爲鑄字的argv到結構型
struct xyz {
char *str;
int x;
int y;
};
對此我從其他程序1獲得作爲輸入參數的可執行文件。(其它程序做了program2
的execve
與輸入參數此結構)。
我想知道,我可以做這個輸入參數的類型爲(struct xyz*)argv[1];
,或者我必須在發送它之前將其轉換爲字符串格式?
您不能以任何方式將任意數據傳遞到命令。您必須將其序列化爲一個字符串,或執行一些IPC(例如通過管道/套接字)。
原因是這些字符串是空終止的。您的char*
成員最終會有一個\0
,即使不是,小於16843009(0x01010101
)的任何int都將具有空字節,並且無法正確複製。
請注意,大於該數字的整數也可以具有空字節。 –
沒錯。 '0x7FFFFF00'仍然會把它搞砸了! – Polynomial
您還需要一種方法來確定命令行中的字符串結束並開始編號。 –
argv [1]是一個字符串。你不能將一個字符串轉換爲結構體。你需要創建自己的包裝函數來進行序列化和解析,然後注意各種問題 - 端到端問題和編碼問題(使用Unicode的寬字符等)
愚蠢的問題:你試過了嗎?它是否按預期行事? –