我寫一個程序,並具有以下循環:值在地址消失
while ((c = getchar()) != EOF){
if (c == '\n'){
char newword[strlen(word) + 1];
strcpy(newword, word);
words[i].key = newword;
memset(word, '\0', MAXLENGTH);
i++;
j = 0;
} else {
word[j++] = c;
}
}
哪裏words
是結構數組:
struct kvp{
char *key;
int line;
};
和word
是一個大陣列(大小MAXLENGTH
的),其中的前幾個值構成一個字符串。
問題在於words[i].key
。在if語句中,打印它(將其設置爲newword
後)將返回正確的值,即與輸入的單詞相同的最小大小的字符串。一旦if語句退出並返回while循環的外部體,它就會變成完全隨機的東西,即?HBk?
。
有三件事情,我懷疑可能會發生:
strcpy
不採取行動,我認爲它確實newword
是一個局部變量,並以某種方式影響的東西(不健全的權利的方式)- 我不正確理解指針或結構尚未(完全有可能的,我剛開始學習C)
這是怎麼回事?
「聽起來不正確」 - 有趣的是,你會認爲......你的經驗可能是垃圾收集語言。但是在C中,變量的作用域限定了它的生命週期,並且在該作用域之外使用它是未定義的行爲。 – 2012-08-14 03:07:01
絕對好知道,謝謝!是的,我的經驗來自於Java,JavaScript,Ruby和PHP。 – 2012-08-14 03:24:58