2012-07-27 2 views
2

이것은 내 코드입니다. 나는이 형식으로 10 개 파일을 만들 필요C에서 경로와 변수 연결

0.txt
1.TXT
...

그러나 나는 그것을 할 수 없다, 결과는 다릅니다. 누구든지 도와 줄 수 있습니까?

#include <stdlib.h> 
#include <string.h> 


char* direccion(char *dirD,int number){ 
    char buffer[100]; 
    char *n; 
    char *q; 
    char* formato=".txt"; 

    sprintf(buffer, "%i", number); 
    n= strcat(dirD,buffer); 
    q= strcat(n,formato); 

    return q; 

} 
int main(){ 
    int u; 
    int number= 0; 
    int t= 0; 
    char* q = "e:/c9/"; 
    for(t=0; t< 10 ; t++){ 

     char* dir = direccion(q,number); 

      if(fopen(dir,"w")){ 
       fopen(dir,"w"); 
       u=1; 
      } 
      else{ 
       u=0; 
       printf("Error\n"); 
      } 
     number++; 

    } 
    return 0; 
} 

고마워요!

+0

Windows 환경입니까? –

+0

예, Windows에만 있습니다. – Sark

답변

3

문제 없음 (1)은 다음과 같습니다

char *q = "e:/c9/"; 
for(t = 0; t < 10; t++) 
{ 
    char *dir = direccion(q, number); 
} 

변수 q는 문자열 리터럴입니다. 그러나 함수 direccion()에서는 strcat()의 첫 번째 인수로 전달합니다.이 인수는 수정하려고합니다. 즉, 붐 (boom)입니다. 해결 방법 : @Charlie 마틴 지적이는

char buf[1000]; 
strcpy(buf, "e:/c9/"); 
char *dir = direccion(buf, number); 

문제 # 당신이 direccion() 함수가 반환 된 후 유효하지 않은 정적가 자동으로 할당 된 지역 문자열을 반환한다는 것입니다. 아마도

return strdup(buffer); 

이 경우; 사용 후 그것을 자유롭게하는 것을 잊지 마십시오.

편집 : 당신도 이것에 대해 묻지 않는 것 같습니다. 당신은 open() 시스템 호출 (기능)을 사용하여 파일을 만들 수 있습니다 : 물론

#include <fcntl.h> 
#include <stdio.h> 

int fd = open("file.txt", O_RDWR | O_CREAT, 0644); 
close(fd); 

당신이 0644에 대해 원하는 실제 파일 모드를 대체를 (그러나 그것을 실행하는 프로그램을 포함하지 않는 파일을 실행하지 않음) .

편집 2 :

for (yadda yadda) 
{ 
    strcpy(buf, "e:/c9/"); 
    char *dir = direccion(buf, i); 
} 

+0

WTF는 코드 포맷터를 사용하고 있습니까? –

+0

니스,하지만 지금 파일 생성 : 0.txt, 0.txt1.txt, 0.txt1.txt2.txt 등 어떻게 해결할 수 있습니까? – Sark

+0

@ user1558736 업데이트를 참조하십시오. –

2

함수 내부에 자동으로 버퍼가 할당되어 스택에 할당됩니다. 돌아 오면 그 메모리는 더 이상 유효하지 않습니다. 호출자에 버퍼를 할당하고 포인터를 전달하거나 정적으로 할당하려고합니다.

0

윈도우 : 심지어 for 루프에서, 그래서 ...이 하나를 잡을하지 않았다, 당신은 반복해서 기본 파일 이름을 재설정 할 경로에 확장을 추가하는 등의 작업을 수행하는 데 사용할 수있는 일련의 경로 처리 함수가 있습니다. 예를 들어 : 자세한 내용은

PathAddExtension(buffer,".txt"); 

http://msdn.microsoft.com/en-us/library/windows/desktop/bb773559(v=vs.85).aspx

참조는 또한, _MAX_PATH 크기의 버퍼 경로를 처리 할 때 작업하는 것이 좋습니다.