标题中提到的三件事对我来说有点新鲜。我从概念上熟悉了所有这些,但这是我第一次尝试用C ++从头开始编写自己的程序,它涉及所有这三个方面。这是代码:
int main(int argc, char *argv[])
{
FILE *dataFile;
char string [180];
dataFile = fopen(argv[1],"r");
fgets(string,180,dataFile);
fclose(dataFile);
}
编译很好,但是当我使用简单的输入文本文件执行时,我会遇到分段错误。我搜索了多个教程,但我无法弄清楚原因。任何帮助将不胜感激。
答案 0 :(得分:2)
代码中有两种可能的分段错误原因:
argv[1]
不存在,在这种情况下尝试访问它可能会导致段错误。请检查if (argc > 1)
以避免此问题。fopen
无法成功打开文件,在这种情况下,尝试从文件(fgets
)或fclose
读取文件会导致细分错误。在调用fopen之后,您应立即检查返回值是否为NULL
,例如if (dataFile == NULL)
。答案 1 :(得分:1)
你应该在这里检查一些事情。它仍然可能无法达到您的预期,但它可以避免您遇到的错误。
int main(int argc, char** argv)
{
if(argc > 1) // FIRST make sure that there are arguments, otherwise no point continuing.
{
FILE* dataFile = NULL; // Initialize your pointers as NULL.
const unsigned int SIZE = 180; // Try and use constants for buffers.
Use this variable again later, and if
something changes - it's only in one place.
char string[SIZE];
dataFile = fopen(argv[1], "r");
if(dataFile) // Make sure your file opened for reading.
{
fgets(string, SIZE, dataFile); // Process your file.
fclose(dataFile); // Close your file.
}
}
}
请记住,在此之后,string
可能仍为NULL。见'fgets' for more information.