gpt4 book ai didi

c - 文本编辑器程序中的错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:43 24 4
gpt4 key购买 nike

我正在尝试用 C 编写一个简单的文本编辑器程序,但我遇到了这个奇怪的错误。当我到达第一个用户提示时,程序崩溃了。这是我的代码:

#include <stdio.h>

int main()
{
FILE *filenew;
char firstchoice[200];
char filenamenew[200];
char overwrite;
char *textwrite;
char *filenameopen;
FILE *fileopen;
char readchar;
char *textopen;

start:
puts("Welcome to the Texter Text Editor!");
printf("\n");
printf("\n");
puts("Type ~N~ to create a new document,");
puts("Type ~O~ to open an existing document,");
puts("And type ~Q~ to quit.");
scanf("%s",&firstchoice);
if(firstchoice=="~N~" || firstchoice=="~n~")
{
puts("Enter the filename of the new document:");
scanf("%s",&filenamenew);
filenew = fopen(filenamenew,"r");
if(filenew)
{
fclose(filenew);
printf("%s already exists!\nDo you wish to overwrite it? [Y/N]",filenamenew);
overwrite=getchar();
if(overwrite=='y' || overwrite=='Y')
{
filenew=fopen(filenamenew,"w");
goto textnew;
}
else if(overwrite=='N' || overwrite=='n')
{
goto start;
}
}

textnew:
if(!filenew)
{
do
{
scanf("%s",textwrite);
fprintf(filenew,"%s",textwrite);

}
while(textwrite!="~Q~" && textwrite!="~q~");
}

}
else if(firstchoice=="~q~" || firstchoice=="~Q~")
{
return(0);
}
else if (firstchoice=="~o~" || firstchoice=="~O~")
{
printf("Enter the filename of the document you want to open:\n");
scanf("%s",filenameopen);
fileopen=fopen(filenameopen,"r+");
if(!fileopen)
{
puts("File does not exist!");
goto start;
}
else
{
do
{
readchar=getc(fileopen);
putchar(readchar);
}
while(readchar!=EOF);
do
{
scanf("%s",textopen);
fprintf(fileopen,"%s",textopen);
}while(textopen!="~Q~" && textopen!="~q~");
}



}
return(0);
}

我知道这很困惑,所有的 goto 和从 char 数组切换到 char 指针,但请尝试提供帮助。

最佳答案

我看到的第一个问题是字符串比较:

firstchoice=="~N~"

应该是

strcmp(firstchoice, "~N~") == 0

您比较的是指针的值而不是字符串的值,因此所有比较都失败了,程序刚好到达返回子句。

关于之后的段错误:

  1. 您打开一个新文件,filenew = fopen(filenamenew,"r");,如果文件不存在,(if(!filenew)),你尝试写入它 (fprintf(filenew,"%s",textwrite);)。您需要先打开它进行写入。

  2. 您调用 scanf("%s",textwrite);textwrite 是一个未初始化的指针并且它指向没有缓冲区时,它应该是数组,或指向已分配内存的指针(例如通过 malloc)。您代码中的以下变量存在此错误:

    • 字符 *textwrite;
    • char *文件名open;
    • 字符读取字符;
    • char *textopen;

在你通过之后,我认为大部分问题都会被抛在脑后。

关于c - 文本编辑器程序中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6883060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com