2014-07-19 6 views
0

이 질문에 답을 얻었으나 본인의 답변은 제 사례에 실제로 적용되지 않았습니다. 프로그램이 끝나면 여러 개의 파일이 작성되어 열립니다. 단순화를 위해 목록을 두 개로 제한했습니다. 변수 dirPath은 실행시 전달 된 명령 줄 인수입니다.인수 (변수) 중 하나를 계속 재사용하면서 두 문자열을 연결하려면 어떻게해야합니까?

는 여기에 내가 먼저 시도 무엇 :

FILE *fid_sensory_output; 
FILE *fid_msn_output; 

fid_sensory_output = fopen(strcat(dirPath,"sensory_output"), "w"); 
fid_msn_output = fopen(strcat(dirPath,"msn_output"), "w"); 

이 대신 strcat와는 연결된 문자열의 복사본을 반환하지 않기 때문에 작동하지 않지만, 제 1 회에 2 번째 인수를 추가합니다. 해결 방법을 찾을 때 나는 strcpy와 strcat를 함께 사용하거나 sprintf를 사용하여 these recommendations을 찾았다.

내가 먼저 sprintf를 시도하지만 dirPathchar *로 선언에도 불구하고 char *이 예상 된 위치에 int을 통과하려고했던 없다는 오류가 발생했습니다. 나는 또한 운이없는 문자열 리터럴을 전달하려고 시도했다.

strcat와 strcpy를 다양한 방법으로 사용해 보았습니다. 어떤 제안?

답변

2

유일한 방법 :

FILE *fid_sensory_output; 
char *string; 

string=malloc(strlen(dirpath)+strlen("sensory_output")+1); 
strcpy(string,dirpath); 
strcat(string,"sensory_output"); 

fid_sensory_output = fopen(string, "w"); 
free(string); 
+0

를 반환! – aweeeezy

-1
char temp_dir_path[256]; 
strcpy(temp_dir_path, dirPath); 
fid_sensory_output = fopen(strcat(temp_dir_path, "sensory_output"), "w"); 
strcpy(temp_dir_path, dirPath); 
fid_msn_output = fopen(strcat(temp_dir_path,"msn_output"), "w"); 
1

이 작업을 위해 현재 snprintf를 사용할 수 있습니다. 모든 문자열 연산은 버퍼 오버 플로우를 피하기 위해 버퍼 크기를 고려해야합니다.

현재 snprintf이 나를 위해 그것을했다, 정말 감사합니다 (문자열 종료 '\ 0'을 포함하지 않음) 버퍼에 기록 문자 수

FILE *fid_sensory_output; 
FILE *fid_msn_output; 
char path[MAX_PATH]; 

snprintf(path, sizeof(path), "%s/%s", dirPath, "sensory_output"); 
fid_sensory_output = fopen(path, "w"); 

snprintf(path, sizeof(path), "%s/%s", dirPath, "msn_output"); 
fid_msn_output = fopen(path, "w");