我有以下代碼:從嵌套結構訪問信息傳遞給函數
struct wordPair {
char* englishWord;
char* foreignWord;
};
struct dictionary {
struct wordPair ** data;
int nbwords;
int size;
};
說我有struct dictionary *dictionaryPtr
充滿了一些數據,我把它傳遞給下面的功能:
char* dictionary_translate(struct dictionary* d,
const char* const english_word,
const char* const foreign_word)
在函數dictionary_translate
,我如何訪問嵌套在傳遞的struct中的struct wordPair
的數據?我需要該函數返回englishWord
或foreignWord
的一個strdup。
我試圖d->data->englishWord
,但這給了我錯誤「請求成員'englishWord'在某些不是結構或聯盟」。
更新!
我需要的功能dictionary_translate
要做的是確定是否有一個匹配的單詞對包含傳遞給它的單詞之一,並返回翻譯的strdup
(對中的另一個單詞)。以下是我定義的詞的數組:
const char* test_translations[NB_TESTS][NB_COLS] =
{
{"hello", "hola"},
{"cat", "gato"},
{"dog", "perro"},
{"thanks", "gracias"},
{"pants", "pantalones"},
{"shoes", "zapatos"},
};
這是我如何打電話來的第一次測試,我想的功能,這是當函數傳遞一個英文單詞的翻譯和要求返回一個外來詞:只要程序獲取到翻譯功能
char* translationPtr = NULL;
for (i = 0; i < NB_TESTS; i++) {
translationPtr = dictionary_translate(dictionaryPtr, test_translations[i][0], NULL);
printf("English Word %s translated: %s\n", test_translations[i][0], translationPtr);
}
這裏是因爲我有這麼遠的翻譯功能......
char* dictionary_translate(struct dictionary* d,
const char* const english_word,
const char* const foreign_word){
int i;
if (d == NULL) return NULL;
for (i = 0; i < d->nbwords; i++) {
if (strcmp(english_word, d->data[i]->englishWord) == 0)
return strdup(d->data[i]->foreignWord);
else if (strcmp(foreign_word, d->data[i]->foreignWord) == 0)
return strdup(d->data[i]->englishWord);
}
return NULL;
}
,它崩潰。我無法弄清楚調試器是怎麼回事,但看起來好像translationPtr
從來沒有一個NULL(0x0)以外的值。我對調試器是新的,所以我確信它可以告訴我更多,如果我知道如何閱讀它。
也許你需要解引用數據,如d - >(* data) - > englishWord,因爲它看起來像數據是指向數組的指針。 – HypnoToad
@DoctorZero:這不是語法上有效的C. –