2013-02-02 9 views
-4

나는 지금 내 프로그램에 정말 좌절감이있다. strcat 함수는 단순히 원하는 문자열을 연결하지만 strcat 함수 (주석 처리되지 않은 경우)가 연결을 올바르게 처리하지 못하고 어떻게 든 내 변수의 값을 변경합니다.C에서 strcat 함수로 고생

/usr/local/sbin 
/usr/local/sbin 
/usr/local/bin 
/usr/local/bin 
/usr/sbin 
/usr/sbin 
... (etc) 

그러나이 두 줄이 주석 때

//strcat(file_loc, slash); 
//strcat(file_loc, temp); 

가 여기에 내가 얻을 희한 결과 : 여기

/usr/local/sbin 
/usr/local/sbin/ls 
ls 
ls/ls 
/usr/sbin 
/usr/sbin/ls 
... (etc) 

으로는 예를 들어, 인쇄 된 경우, 올바른 결과입니다 내가 일하고있는 기능이다. 도움말은 대단히 감사하겠습니다.

void step_four (void) { 
    int n=0; 
    int has_slash=0; 
    const char * slash="/"; 
    char * aa; 
    char bb[64]; 
    int cc=0; 
    int len; 
    char * file_loc = malloc(100); 
    char * temp= malloc(100); 
    char * temp2 = malloc(100); 
    //char [] f="FOO"; 


    printf("XXXXXXXXXXXXXXXXXXXXXXXX\n"); 
    printf("Made it to step 4\n"); 
    printf("First word of command is: %s\n", words[0]); 

    aa = words[0]; 
    len = strlen(aa); 

    while (cc < len) { 
     bb[cc] = *(aa + cc); 
     cc++; 
    } 

    while(n < len) { 
     if (bb[n++] == '/') { 
      //printf("HELLO !!\n"); 
      has_slash=1; 
      break; 
     } 
    } 


    //printf("has_slash=%d\n", has_slash); 

    n=0; 

    while (paths[n] != NULL) { 
     //printf("%s\n", paths[n]); 
     file_loc = paths[n]; 
     //file_loc[strlen(file_loc)]='\0'; 
     temp = words[0]; 
     if (has_slash) { 
      //do stuff for slash 

     } 
     else { 
      printf("%s\n", file_loc); 
      //strcat(temp2, "a"); 
      //strcat(file_loc, slash); 
      //strcat(file_loc, temp); 
      //file_loc[strlen(file_loc)]='/'; 
      //file_loc[strlen(file_loc) + 1]='/0'; 
      printf("%s\n", file_loc); 
     // f = file_loc; 

     } 
     n++; 
    } 

} 
+0

'strcat'에 대한 호출 대신'snprintf' (또는'asprintf')를 사용하는 것을 고려 했습니까? 그것은 아마도 귀하의 작업에 더 적합하고 훨씬 안전합니다! 또는 C++로 코딩하는 경우'std :: string'을 사용하십시오. –

+1

'strcat()'**는 첫 번째 인수를 변경합니다 **. –

+0

@ H2CO3이 잘못되었습니다. 고양이는 어떤 주장도 바꾸지 않습니다. (jk) –

답변

0

http://www.cplusplus.com/reference/cstring/strcat/

char * strcat (char * destination, const char * source);

의 "대상 문자열 소스 문자열의 카피를 추가. 널 종료 문자 첫 문자을 덮어대상에 출처는 null 문자은 대상에 둘 다 연결하여 형성된 문자열의 끝에있는 끝에 포함됩니다. "

위의 인용문은 cplusplus의 것입니다.

+3

... 상쾌한 변화를 위해 올바른 것입니다. –