Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改C函数中的全局变量?_C_Pointers_Variables - Fatal编程技术网

如何更改C函数中的全局变量?

如何更改C函数中的全局变量?,c,pointers,variables,C,Pointers,Variables,我正在用C编写一个简单的文本编辑器。我必须将inuse\u head和free\u head定义为全局变量。我需要更改函数中两个全局变量的值。以下是我迄今为止编写的代码: #include <stdio.h> #include <string.h> struct node { char statement[40]; int next; }; struct node textbuffer[25]; int free_head; int inuse_hea

我正在用C编写一个简单的文本编辑器。我必须将
inuse\u head
free\u head
定义为全局变量。我需要更改函数中两个全局变量的值。以下是我迄今为止编写的代码:

#include <stdio.h>
#include <string.h>

struct node
{
    char statement[40];
    int next;
};
struct node textbuffer[25];

int free_head;
int inuse_head;

void insert(int line, char* stat)
{
    FILE *file;
    file=fopen("deneme.txt","a");
    
    if(file!=NULL)
    {
        
        int i;
        int k;
        
        strcpy(textbuffer[line].statement,stat);
        textbuffer[line].next=line+1;
        fprintf(file,textbuffer[line].statement);
        
        for(i=0;i<=25;i++)
        {
            if(textbuffer[i].statement==NULL)
            {
                free_head=i;
                break;
            }
        
        }
        
        for(k=0;k<=25;k++)
        {
            if(textbuffer[k].statement!=NULL)
            {
                inuse_head=k;
                break;
            }
        
        }
    
    }
    
    else
    {
        printf("File couldn't found.");
    }
    fclose(file);

}


int main()
{
    insert(3,"Hello World");
    printf("free list: %d and inuse list: %d",free_head,inuse_head);
    return 0;   
}
#包括
#包括
结构节点
{
char语句[40];
int-next;
};
结构节点textbuffer[25];
int自由头;
int inuse_头;
空插入(整数行,字符*stat)
{
文件*文件;
file=fopen(“deneme.txt”,“a”);
如果(文件!=NULL)
{
int i;
int k;
strcpy(textbuffer[line].语句,stat);
textbuffer[line].next=line+1;
fprintf(文件,textbuffer[line].语句);

对于(i=0;i这两个变量都有值
0
的原因不是函数
insert
访问这些变量时遇到问题。由于变量都是全局变量,函数
insert
可以像任何其他变量一样直接访问这两个变量。因此,无需使用指针来访问这些变量这些变量

问题在于,在函数
insert

free\u head=i;

永远不会被执行,而且

inuse\u head=k;

仅在
k
的值为
0
时执行一次

这就是为什么两个变量的值都不会改变它们的值,并且在整个程序中都保持它们的初始值
0

另外,值得注意的是,您的程序已经。正如在注释部分中指出的,您正在访问数组
textbuffer
越界

线路


for(i=0;i)在监视所有变量的值时,您是否已尝试在调试器中逐行运行代码,以确定程序在哪一点停止按预期运行?如果您没有尝试此操作,则可能需要阅读此内容:您可能还需要阅读此内容:。此代码在
for中包含未定义的行为(i=0;它是
if(textbuffer[i].statement==NULL)
永远不会为真。
textbuffer[i].statement
是一个固定数组,它衰减为指针,而指针不是
NULL
。你是说
if(strcmp(textbuffer[i].statement,”)==0)