이 프로그램의 경우 터미널 또는 사용자가 지정한 출력 파일 (내)에 내 이름을 써야합니다. 내가 터미널에 내 이름을 기록 할 때프로그램이 명령 줄에 지정된 이름을 사용하여 파일을 생성하지 않습니다.
#include <stdio.h>
int main(int argc, char **argv)
{
// no output file print to screen, print name to terminal
if (argc < 2)
{
fprintf(stdout, "name\n");
}
//print name to output file given by user
else
{
int option;
int fFlag = 0;
while ((option = getopt(argc, argv, "f:")) != -1)
{
//if case 'f' print to output file
switch (option)
{
case 'f':
fFlag = 1; // flag indicates writing name to file
break;
//case f or error
case '?':
printf("error");
break;
}
}
//write to name to output file
if (fFlag)
{
FILE *file = fopen(argv[1], "w");
fprintf(file, "name");
}
}
return 0;
}
내 코드는 작동하지만 사용자에 의해 주어진 파일에 내 이름을 기록 할 때 작동하지 않습니다. 코드가 컴파일되고 실행되지만 파일은 존재하지 않습니다.
명령 줄에 파일이 없을 수 있습니다. 프로그램에 파일을 만들어야하나요?
내가 잘못하고있는 것을 이해합니다. 모두에게 감사드립니다!
당신은 (a) 쓰기 액세스를 위해 열려고하는 파일 이름이'argv [1]'에 들어 있는지 확인하고, (b)'file'이 쓰기를 시도하기 전에 NULL이 아닌지 확인하고, (c) 두 파일을 모두 사용한다고 가정하고 프로그램이 실행중인 * 현재 작업 디렉토리 *가 생성하려는 파일을 설정했는지 확인하십시오. 바로 지금, (a)와 (b)는 잠재적 인 후보자로 보이며, 후자는 [스펜서의 여섯 번째 계명] (http://www.seebs.net/c/10com.html)을 위반 한 주요한 예일뿐입니다. – WhozCraig
재 형식화 된 코드로, 'fprintf (file, "name");가'argc <2' case 내에있는 것 같습니다. – chux
이전의 주석 이외에, 필자는 fclose (file)를 쓰는 것을 잊었다 고 생각합니다. –