有幾件事。首先,由於您對value
使用void*
(這是適當的),所以您需要傳遞void*
作爲第二個參數,而不是常量。這將工作複製一個變量到下一個,但有更有效的方法。
其次,請注意,爲傳遞字符串,您需要將指針傳遞給char指針,並且char *將由函數設置。 (這取決於你是否是「軟拷貝」或「硬拷貝」 - 即指針是指向內存中的相同位置還是指向同一個字符串的另一個副本。你說你已經執行了set
,所以我猜測你已經擁有你想要的方式。
您還沒有列入您的t_flags枚舉,所以我猜適當的值。
char c = 'c';
char* str = "str";
int i = 42;
char c2;
char* str2;
char i2;
set(&c2, &c, CHAR); /* presumably you have a CHAR flag? */
set(&str2, &str, CHARPTR); /* presumably you have a CHARPTR flag? */
set(&i2, &i, INT);
對我來說,更大的問題是,你爲什麼會想這樣做,尤其是因爲在你的國旗你已經需要知道這種類型,它更乾淨(並有更好的類型檢查),只需做:
c2 = c;
str2 = str;
i2 = i;
我假設這只是爲了瞭解功能,或者是爲了解決複雜問題而大量簡化。無論哪種方式,你就是這麼做的。
你只傳遞了兩個參數給你的函數'set'。 – haccks
嘗試'int i = 42;'。 –
雖然你的實現沒有什麼概念錯誤,但你只是複製了一個不太強大的'memcpy' - 我推薦你使用它。 '#define set(data,value)memcpy(data,value,sizeof(value))' –