2011-07-17 14 views
2

이미 문자열의 부분 문자열을 얻는 함수가 있습니다.c에서 부분 문자열 가져 오기

void subString(char* buffer, char* str, int start, int length) 
{ 
    int i, x = 0; 
    int end=start+length; 
    for(i = start ; i <= end; i++) 
     buffer[x++] = str[i]; 
    buffer[x] = '\0'; 

    //return temp; 
} 

새로운 문자열은 버퍼

에 저장됩니다.

char * subString(char* str, int start, int length) 
{ 

    //....... 

} 

함수는 메모리가 할당되었습니다.

모든 의견 환영

+2

그리고 질문은 ...? –

+0

'i <= (시작 + 길이)'가 흉측 (잘못된 것)입니다. 예 : "HELLO"는 start = 0이고 length = 2는 HE를 선택해야하지만 0부터 2까지 포함됩니다. 즉, "HEL"이 걸립니다. – ShinTakezou

+0

질문은 두 함수 프로토 타입의 장단점에 대한 것이지만 아래 답변 대신 두 번째 구현을 제공합니다. 무엇이 물어 보았는지는 분명하지 않습니다. 투표를 종료합니다. –

답변

3

에게 오신 것을 환영합니다? 당신은 간단한 문자 배열로 문자열을 취급하고 있기 때문에

#include<stdlib.h> 
char * subString(char* str, int start, int length) { 
    char *newString = (char *)malloc(length * sizeof(char)); 
    int i, x = 0; 
    int end=start+length; 
    for(i = start ; i <= end; i++) 
     newString[x++] = str[i]; 
    newString[x] = '\0'; 
    return newString; 
} 
+0

좋은데,'malloc'의 반환 값을 캐스팅하지 않고'char'의 크기를 사용하지 마십시오 :-) – cnicutar

+0

왜 안 되니? 명시 적으로 선언해도 명령문의 명확성이 떨어지지 않으며 'malloc'의 올바른 사용을 강화합니다. –

+0

@cnicutar - 주제가 닫혔다는 것을 알았지 만, 왜 'malloc'을 던지거나'sizeof (char) '를 사용하지 않는가? gcc에서 캐스팅하지 않으면 경고 (malloc과 호환되지 않는 암시 적 정의)가 발생하고 sizeof가 없으면 아키텍처에 따라 char 크기가 달라질 수 있습니다 (sizeof (char)는 거의 항상 1 임). –

1

, 왜 당신은 단순히 옛 strncpy 일반을 사용하지 않는?

strncpy(dest, str+offset, len); 
관련 문제