我试图在Linux下使用C读取txt文件。 FILE * fp的=的fopen("的test.txt"" R&#34); 我有上面的代码,但它告诉我"分段错误(核心转储)"。 这是因为我没有将我的txt放在正确的目录下吗?
int main(int argc, char*args[])
{
//printf("%d\n", argc);
int i;
for(i=0;i<argc;i++)
{
printf("%s ", args[i]);
}
int numProcesses=10;
int memorySize=atoi(args[1]);
int pageSize=atoi(args[2]);
int alloAlg=atoi(args[3]);
int evicAlg=atoi(args[4]);
int globLoc=atoi(args[5]);
int peroid=atoi(args[6]);
FILE*fp;
fp=fopen("Desktop/plist.txt","r");
char buff[1000];
//fgets(buff,100,fp);
//printf("%s",buff);
}
答案 0 :(得分:2)
当您打开没有路径的文件时,假定该文件位于当前目录中。至于你的分段错误 - 你应该在尝试从它读/写之前测试FILE
针对NULL
的指针。
答案 1 :(得分:0)
将您的文本文件放在创建可执行文件的同一文件夹中。
答案 2 :(得分:0)
由于FILE *fp = fopen("test.txt","r")
命令,您无法获得分段错误。 (如果这是你在想的话)
如果您尝试按fopen()
打开的文件不存在。在这种情况下,fopen()
将只返回NULL。
您可能正在获得分段错误,因为您尝试使用文件指针fp
读取内容。例如:你正在做char ch = fgetc(fp)
之类的事情。
为避免这种情况,您始终可以检查fopen()
返回的值。如果fopen()
无法打开文件,则返回NULL。
所以你可以这样做:
FILE *fp = fopen("text.txt","r");
if(fp == NULL)
{
//Your code to handle this case where file was not opened by fopen
}
else
{
//Do what you wanted to do with your file
}
所以,回答你的问题是肯定和否。
是:因为分段错误是因为fp包含NULL,因为你的txt文件不在你的目录中。
否:因为分段错误实际上是因为你试图访问你不应该访问的内存(),而不是因为目录中没有txt文件,但是注意到它的根本原因是你的文件不在目录中。