2017-09-06 5 views
1

이 코드는 내가 fopen()이고, 문자열이 name이고 "test"가 있습니다. 어떻게 확장자가 아닌 내 name var에 ".txt"와 같은 파일 확장명의 상수를 정의 할 수 있습니까? 내 생각에 대해 : #define TXT ".txt"하지만 함수에서 사용하려면 어떻게해야합니까? fopen(name TXT, "r");처럼 또는 scanf() 부분의 파일 이름을 물어볼 때 상수를 추가해야합니까?C에서 파일 확장명에 대해 ".txt"상수를 정의하는 방법은 무엇입니까?

+2

전염병처럼 strncpy()를 피하십시오. 'snprintf()'를 더 잘 사용하고 반환 값을 확인하십시오. – wildplasser

답변

1

질문을 올바르게 이해했다면 파일 이름을 물어 본 후에 상수를 추가하기 만하면됩니다.

#define _GNU_SOURCE 
#include <string.h> 
#include <stdlib.h> 
#include <stdio.h> 

#define TXT ".txt" 

int main(void) 
{ 
    char name[30]; 

    printf("Please enter file name: "); 
    if (scanf("%25s", name) != 1) /* must leave space for ".txt" and \0. */ 
     exit(-1); 

    *((char *)mempcpy(name + strlen(name), TXT, 4)) = "\0"; 

    printf("%s\n", name); 
    exit(0); 
} 

mempcpy와 그런 식으로 문자열을 연결하는 약간 이상하게 보일 수도 있지만 실제로 내가 아는 가장 안전한 방법 : 이런 식으로 뭔가 작동합니다. 도움이되기를 바랍니다.