2012-02-01 5 views
2

n 문자 배열 (string1)을 i 문자 (char * first)와 n-i 문자 (char * second)를 나타내는 두 문자 포인터로 분할하려고합니다. 두 번째 배열의 경우, 내가 사용했습니다.문자 배열 나누기 방법

char* second = string1+n; 

첫 번째 문자 만 사용하는 방법이 궁금합니다. 두 배열에 더 많은 메모리를 할당하고 싶지는 않지만, string1을 조작하여 이미있는 부분을 가리키고 싶습니다.

편집 :

나는 문자열 1을 편집 할 수 없습니다. null 문자를 추가하지 않고 길이를 짧게 만들 수 있습니다.

+0

을 응답에서 당신의 편집에 : (당신이 그것을 나중에 free()에 괜찮다 경우) 가장 쉬운 방법은, strdup()를 사용하고, 이후 str1NULL 터미네이터를 넣어하는 것입니다이 작업을 수행하는 그것을 복사하십시오. 'strndup()'을 사용하면 길이를 취하여 특정 부분 만 복사하고 자동으로 메모리를 할당 할 수 있습니다. –

+0

가능한 중복 [char 배열에서 n 문자를 검색하는 방법] (http://stackoverflow.com/questions/162804/how-to-retrieve-n-characters-from-char-array) –

답변

2

더 많은 메모리를 할당하지 않으면 다른 C 문자열처럼 사용할 수 없습니다 (예 : 문자열 함수 (printf 등)에 전달). "second" ".

길이를 알고 있기 때문에 확실히 많은 경우에 문제가 발생할 수 있지만 여기에서 할 수있는 마법은 없습니다. 널 종결자는 바이트가 필요합니다.

+0

어떻게 든 string1을 (으)로 변환 할 수 있습니까? 포인터가 그것이 내가 길이라고 생각하게 만드시겠습니까? – mrswmmr

+1

아니요. 당신에게 무엇을 말할지 모르겠다. 그것이 작동하는 방식이 아닙니다. –

1

C의 문자열은 NULL이어야하며 끝 부분에 \0 문자가 있어야합니다. 당신이 가지고있는 경우, 예를 들어, 두 단어는 공백으로 분리 그래서 같은 :

char *str1 = "fat chance"; 

당신은 "분할"을 \0과 공간을 대체하여 수 : 다음

str1[3] = '\0'; 

을 그리고 가리 키도록 str2 설정 \0 이후에 : 당신이 터미네이터에 넣어 수있는 편리한 장소가없는 경우에는 분할 뭔가를해야하는 경우

char *str2 = str1 + 4; 

, 다음을 수행해야 문자열의 두 번째 부분을 다른 곳에 복사하십시오. 아니, 당신이 필요로하는

char *str2 = strdup(str1 + 4); 
str1[4] = '\0'; 
+0

나중에 무료로 사용해야하기 때문에 strdup이 메모리를 할당한다고 가정하고 있습니까? – mrswmmr

+0

@mrswmmr, yessir. 'malloc()'을 직접 사용하지 않아도됩니다. –