2011-08-23 5 views
1

두 상수 char * 조인하고 결과를 반환하는 함수가 있습니다. 내가 생각하고 싶은 것은 당신이 하나의 문자에 가입하고자하는 경우, 당신은 추가 할 s2에서 문자의 양을 소요 별도의 함수를 작성해야합니다어떻게 char을 상수 char *에 조인 할 수 있습니까?

char *command = "nest"; 
char *halloween = join("hallowee", command[0]); //this gives an error 

char *join(const char* s1, const char* s2) 
{ 
    char* result = malloc(strlen(s1) + strlen(s2) + 1); 

    if (result) 
    { 
      strcpy(result, s1); 
      strcat(result, s2); 
    } 

    return result; 
} 

답변

4

작성한 함수에는 두 개의 C- 문자열 (즉, 두 개의 const char * 변수)이 필요합니다. 여기에서 두 번째 인수는 포인터 (const char *)가 아닌 간단한 'n'문자 (const char) 인 command[0]입니다. 그러나이 함수는 전달한 값이 포인터이며 문자 'n'의 ASCII 값에 의해 주어진 메모리 주소의 문자열을 찾으려고 시도하여 문제를 일으킨다 고합니다.

편집 : 당신이 join 기능을 변경해야 할 것, 그것이 작동되도록하려면

char *join(const char* s1, const char c) 
{ 
    int len = strlen(s1); 
    char* result = malloc(len + 2); 

    if (result) 
    { 
      strcpy(result, s1); 
      result[len] = c;   //add the extra character 
      result[len+1] = '\0'; //terminate the string 
    } 

    return result; 
} 
+0

잘 나는, 내가 함수가 소요되는 매개 변수를 변경할 수 있다는 것을 이해하지만 여전히, strcpy를 () 및 strcat() canst char * .. 필요하며 내가 가진 간단한 char. 그래서 나는 strcpy()와 strcat()에서 사용할 수 있도록 [0] 명령을 할 필요가있다. Thanks – user870565

+0

죄송합니다, 내 페이지 새로 고침 hadnt. 당신이 좀 봐 보겠습니다 – user870565

+0

덕분에, 나는 다른 곳에서 2 개의 const chars *를 결합하기 때문에 함수 자체를 변경하는 것을 피하고 싶었습니다. 모두 똑같은 감사를 표합니다. :-) – user870565

2

일정의 char *의 예에 문자를 조인 .

1

가장 좋은 문자열로 단일 문자를 추가 할 수있는 새로운 기능을 만드는 것입니다. 그러나 당신이 어떤 이유로 그대로 join() 기능을 사용하고자하는 경우 다음과 같이, 당신은 또한 진행할 수 :

char *command = "nest"; 
char *buffer = " "; // one space and an implicit trailing '\0' 
char *halloween; 

*buffer = command[0]; 
halloween = join("hallowee", buffer);