2013-07-18 5 views
0

나는이 C로 작성 다음 코드로 숯불합니다. 나 맞아?포인터 char 배열

그런 경우 함수 결과 (즉, 문자에 대한 포인터)를 문자 배열로 변환하여 하나씩 읽을 수 있도록하려면 어떻게해야합니까?

+1

기술적으로는 문자에 대한 포인터입니다. 정확히 말하면, 문자가있는 메모리 위치를 가리 킵니다. 그러나 'malloc'으로 할당 된 메모리 덩어리가 '1'보다 커 보이기 때문에 어떤 문자가 다른 문자 뒤에 오는 것을 막을 수는 없습니다. 포인터를 통해 효과적으로 문자 배열에 도달 할 수 있습니다. – Nbr44

+0

위의 코드는 실제로 문자 스트림/배열을 가리키며 한 문자가 아닙니다. 그래서 문자 배열로 반환 된 결과를 읽을 수 있습니다. – Jack

+0

주어진 malloc (fsize + 1);이 의도는 후행 \ 0을 추가하는 것이 었는지 궁금합니다. – doctorlove

답변

0

psize는이 작업을 수행 할 수 있어야 외부에서, 함수에 의해 설정됩니다 완료되면 result을 무료로 보내십시오.

+0

그 기능에 대해 잘 설명해 주셔서 감사합니다. 전에 malloc을 사용한 적이 없기 때문에 모든 것이 무엇인지 확신 할 수 없었습니다.덕분에 다시 도움이되었습니다. – elrim

+0

@elrim이 도움이되는 대답을 확인해보십시오 .- malloc을보고 자유롭게 사용하십시오 :-) – doctorlove

+0

나는 모든 답변을 유용하다고 투표했지만, 그렇게하기 위해 더 많은 평판이 필요합니다. (너무 불공평합니다. – elrim

1

반환 유형을 변경할 필요가 없습니다. 색인을 사용하여 malloc()에 의해 할당 된 메모리 영역을 직접 참조 해제 할 수 있습니다. 배열의 기본 주소를 반환합니다. 그래서 그 주소에 인덱스를 추가하면 할당 된 메모리에 직접 액세스 할 수 있습니다. 당신은 다음과 같은 C에서

result[0],result[1],.... 
+0

감사합니다! 위의 경우 가끔은 일들이 생각보다 쉽다는 것을 알기 위해 – elrim

2

에 액세스 할 수 있습니다, 배열은 동일한 유형의 요소 단지 순서입니다. 문자열은 배열 일 뿐이며 문자 시퀀스입니다.

배열 (및 문자열)은 한 방향으로 만 표시됩니다. 첫 번째 요소 (문자)에 대한 포인터입니다. 결론을 들자면, 예, 첫 번째 요소에 대한 포인터를 가짐으로써 배열이나 문자열의 길이를 알 수있는 방법이 없습니다. 이러한 이유 때문에 모든 C 문자열에는 null 문자 '\0'이 추가됩니다. 문자열은 문자열의 끝을 감지하기 위해 모두 0 인 바이트입니다. 배열의 경우 길이를 전달해야합니다 (일부 특수한 경우는 제외하고 여기서는 생략합니다). 프로그램에서

에서, malloc() 기능 fsize+1 바이트를 할당 한 후 C 프로그래머로 pan_protocol_get_image()

에 의해 반환되는 첫 번째 바이트에 대한 포인터를 반환, 그것은 포인터에서 반환 있는지 확인하는 것은 사용자의 책임이된다 이 함수는 문자열의 첫 번째 문자를 가리키며 문자열에는 널 종결자가 있습니다.

그냥 정상적인 문자열로 반환 된 값을 사용하여, 괜찮을 것이다. 또한이 함수가 반환하는 버퍼 (문자열)의 길이를 모를 때는주의해야합니다. 잊지 마세요

for (unsigned long i = 0; i<psize; ++i) { 
    //do something with result[i] } 
} 

:이

if (psize) *psize = fsize; 

그래서 여기에 NULL을 보내 있지 않다면