2011-07-29 51 views
1

我有一個結構定義爲迭代地爲C結構賦值

typedef struct{ 
char string1 
char string2 
int number1 
char string3 
}structure1 

並且想要在這樣的循環中將值分配給string1,string2,number1,string3

structure1 bob 
for(int i = 0,i<=4,i++) 
{ 
bob.i = assigned value 
} 

現在我理解上面的代碼是它的通用形式只能用於整數,因爲你不能只使用string = string進行賦值,但同樣的問題就出現了,因爲我不知道如何在結構中引用它們而不是逐一指定它們。對於字符串,將有一個依賴於i索引的第二個賦值,如果它是一個整數或字符串,那麼它可以執行賦值。我在思考枚舉的內容,但我從來沒有在實際意義上使用它們,只是理論上的。

+2

這是沒有意義的。你想達到什麼目的? – Johan

+0

基本上我必須解析文件,它有6個,每行的信息,所定義類似於上述這個被放入的結構。 共有約10個線路。 所以我需要建立一個結構數組,然後裏面的是,讀取文件解析線,分配這些值回結構,其中我寧願做迭代如果可能的話 –

+0

它看起來很像[思考] (http://en.wikipedia.org/wiki/Reflection_(computer_programming)),它需要更高級別的語言。 –

回答

2

這是不可能的C.最接近於將使用它們分配值來計算領域偏移,然後:

int fieldOffset[4]; 

structure1 base; 

fieldOffset[0] = (char*)&base.string1 - (char*)&base; 
fieldOffset[1] = (char*)&base.string2 - (char*)&base; 
fieldOffset[2] = (char*)&base.number1 - (char*)&base; 
fieldOffset[3] = (char*)&base.string3 - (char*)&base; 

structure1 structYouWantToAssign; 

for (int i = 0; i < 4; ++i) 
{ 
    *((char*)&structYouWantToAssign + fieldOffset[i]) = assignedValue; 
} 

警告:此代碼只是爲了演示它可以分配領域沒有他們的名字,但你應該不是使用它!

+0

我只是討論它在另一個論壇,和一個成員說,這是可能的,使用指針假設整個結構是相同類型的做,而不是一個米什搗爛char和int。 這確實看起來像是一個相當不安全的方式去實現它(不是點,你發佈的例子,但它至少在理論上有意義) –

+0

這就是爲什麼我把所有東西都轉換成'char *'來避免問題,並且它確實工作。但是,您將無法僅基於'i'來分配正確的值類型(因爲您需要知道基礎類型大小)。 –

+0

底層字體大小? –

0

不幸的是這是不可能的C.這是真的很酷,但這樣的事是在語法。

0

你可以嘗試一個稍微不同的方法。想要做到這一點意味着你初始化他們在這種情況下,你可以這樣做:(這是假設你的意思是字符字符串1 [STR_LEN],而不僅僅是單個字符)

#define STRUCT_DEF {"default", "another", 1234, "the last string" } 
... 
structure1 Variable = {"default", "another", 1234, "the last string"}; 

另外,您可以嘗試用陣列重新定義你的結構:

typedef struct{ 
char string[NUM_STRINGS][STR_LENGTH]; 
int number1; 
}structure1 

這樣你就可以在一個循環中尋址字符串,而不用單獨命名每個字符串。

0

使用其分配給成員函數: -

void BobAssign(struct* s, int i, void * value);