【发布时间】:2021-05-28 18:55:24
【问题描述】:
我正在用 C 编写一个简单的文本编辑器。我必须将 inuse_head 和 free_head 定义为全局变量。我需要更改函数中 2 个全局变量的值。这是我目前写的代码:
#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;
}
现在,当我打印 free_head 和 inuse_head 时,它们都打印 0。我需要在函数insert 中更改free_head 和inuse_head 的值。我想我应该用指针来处理它,但是如何处理呢?
【问题讨论】:
-
您是否尝试过在调试器中逐行运行代码,同时监控所有变量的值,以确定您的程序在哪个点停止按预期运行?如果您没有尝试过,那么您可能想阅读以下内容:What is a debugger and how can it help me diagnose problems? 您可能还想阅读以下内容:How to debug small programs?。
-
代码在
for(i=0;i<=25;i++) if(textbuffer[i].statement==NULL) ...中包含未定义的行为,因为索引25 超出了struct node textbuffer[25];的范围。 -
这个
if(textbuffer[i].statement == NULL)永远不会是真的。textbuffer[i].statement是一个固定数组,它衰减到一个不是NULL的指针。你是说if(strcmp(textbuffer[i].statement, "") == 0)吗?