【发布时间】:2015-10-14 01:25:25
【问题描述】:
为什么当我在终端中输入“(文件名).txt”作为参数之一时,我的代码无法运行并给我一个分段错误(核心转储)?但是如果我输入“(文件名)”,那么代码会完美运行吗?
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv){
FILE *inFile = fopen(argv[1], "r");
FILE *outFile = fopen(argv[2], "w+");
char ch = fgetc(inFile);
while(ch != EOF){
fputc(ch, outFile);
ch = fgetc(inFile);
}
}
我跳过了编写这个小示例代码的错误检查。终端输入将是
- "./(program name) (filename).txt (filename2).txt" 但这会产生分段错误(核心转储)
然而,如果我输入这个
- "./(program name) (filename) (filename2) 代码运行时不带 .txt 文件扩展名
【问题讨论】:
-
您需要更具体地说明您在做什么。你的代码是什么?你在提示符下到底输入了什么?
-
欢迎来到 Stack Overflow。请尽快阅读About 页面。我们无法帮助您解决这个问题,因为没有足够的信息让我们做任何事情。请阅读如何创建 MCVE (How to create a Minimal, Complete, and Verifiable Example?) 并为我们提供一个。您需要显示您的代码和可以运行并导致崩溃的命令行。
-
我们无法猜测您的代码。请张贴代码。这似乎是一个运行时问题,但如果没有实际(或仍然存在问题的最小可执行文件),我们怎么能帮助您?
-
您需要发布您的实际代码。将其从源文件复制并粘贴到问题中。您问题中当前的代码将无法编译;您在第 4 行有一个错误的
",您缺少所需的#include <stdio.h>,并且您正在将FILE*与EOF进行比较。 -
解决这些问题后:
fgetc返回一个int,结果需要存储在int中,以便您可以将其与EOF进行比较。