所以我试图找到一种更新变量的方法,我试图让它全局化,以便我可以轻松更改它。唯一的问题是它不起作用,我不知道如何解决它。
我希望SIZE_ARRAY更改为每次调用 remove_unimportant_words 函数时它变成的值。
变焦:
int SIZE_ARRAY = 480;
char list[SIZE_ARRAY][MAX];
void remove_unimportant_words(char word[MAX], int SIZE_ARRAY, char list[SIZE_ARRAY][MAX] , int j, int i);
int main():
while (fscanf(file, "%s", word) != EOF){
remove_unimportant_words(word, SIZE_ARRAY, list, j, i);
}
功能:
void remove_unimportant_words(char word[MAX], int SIZE_ARRAY, char list[SIZE_ARRAY][MAX] , int j, int i)
{
for (i=0; i<SIZE_ARRAY; i++) {
if(strcmp(list[i],word) == 0){
for (j=i; j<SIZE_ARRAY; j++) {
strcpy(list[j], list[j+1]);
}
SIZE_ARRAY--;
i--;
}
}
printf("%dn", SIZE_ARRAY);
}
我基本上尝试打印SIZE_ARRAY的值,并且在进入函数时它总是从 480 开始。
当你在函数remove_unimportant_words
中传递SIZE_ARRAY作为参数时,这在该函数中不再用作全局参数。因此,全球SIZE_ARRAY保持不变。
不应将SIZE_ARRAY作为参数传递。希望您的代码能够按预期工作。
void remove_unimportant_words(char word[MAX], char list[SIZE_ARRAY][MAX] , int j, int i)
{
...
如果 SIZE_ARRAY
是你所说的全局变量,则无需将另一个整数参数传递给函数 remove_unimportant_words()
。
您传递给 remove_unimportant_words() 的SIZE_ARRAY
有效地隐藏了全局变量,其中包含一个不相关的、新分配的变量的本地副本,该副本的名称也为 SIZE_ARRAY
,该变量将在函数返回时释放。
基本上:
void remove_unimportant_words(char word[MAX], int SIZE_ARRAY, char list[SIZE_ARRAY][MAX] , int j, int i);
那里的 int SIZE_ARRAY
参数与实际的全局SIZE_ARRAY变量没有关系,应将其删除,以便函数体中的代码直接引用全局SIZE_ARRAY
变量。
如果您只想将SIZE_ARRAY
从一个函数传递到另一个函数,则还可以使用地址和指针通过引用传递变量。
作为旁注,您确定您提供的代码可以编译吗?我看到很多语法似乎无效...
只是不要使用SIZE_ARRAY
作为参数,函数remove_unimportant_words
可以像往常一样访问它