我正在编写一个程序并具有以下循环:
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)
到底是怎么回事?