2013-01-04 1 views
-2

나는 strcat 함수를 코딩했다. 하지만 내 함수가 이런 식으로 실행되지 않습니다 -----> char * mystrcat (char * s, char * t). 나는 포인터를 반환하고 싶다. 나 좀 도와 줄 수있어?내 strcat가 값을 반환하지 않습니까?

#include <stdio.h> 

void mystrcat(char *s,char *t) 
{ 
    while(*s!='\0') 
     s++; 
     s--; 
    while((*(s+1)=*t)!='\0') 
    { s++; 
     t++; 
    } 
} 

int main() 
{ 

    char str[30], str1[30]; 
    gets(str); 
    gets(str1); 
    mystrcat(str, str1); 
    printf("%s\n",str); 
    return 0; 
} 

답변

0

당신의 함수는 반환 값이 없습니다. 포인터를 반환하려면 그냥 반환하십시오. 또한 공백이 인 경우 올바르지 않습니다.

+0

왜 downvote? 그게 뭐가 잘못 –

+0

내가 대신 무효 반환 쓰기, – user1946383

0

void mystrcat(char *s,char *t)을 쓸 때 "void를 사용하여 반환 값을 얻지 못합니다"라고 말합니다. 포인터를 반환하려면 void이 아니어야합니다.

문자열에 대한 포인터를 반환하려면 char**을 사용하십시오.

문자열은 일련의 문자로 char*으로 표시됩니다.

다음은 코드를 사용한 예입니다.

#include <stdio.h> 

char** mystrcat(char *s,char *t) 
{ 
    char *sOrig = s; 
    while(*s!='\0'){ 
     s++; 
    } 
    s--; 

    while((*(s+1) = *t) != '\0') 
    { 
     s++; 
     t++; 
    } 
    return &sOrig; 
} 

int main() 
{ 
    char str[30], str1[30]; 
    gets(str); 
    gets(str1); 
    char** concatValuePointer = mystrcat(str, str1); 
    printf("Pointer is %p\n",concatValuePointer); 
    return 0; 
} 
+0

그것은 1 포인터로 할 수 있습니까? – user1946383

+0

이 접근 방식의 근본 원인은 전달하는 원래 포인터 위치를 손상시키는 것입니다. 포인터를 증가시키기 전에 (sOrig) 해당 값을 유지하면 (포인터가) 원래 포인터로. 이 질문에 대한 대답이 있습니까? 그렇지 않다면 성취하고자하는 바를 더 기술하십시오. –