2012-03-14 5 views
3

내가 char **argv이라고 가정합니다. 크기를 어떻게 결정합니까?이중 포인터 문자열의 크기는 얼마입니까?

문자열이 있습니다. 예를 들어 sleep 30 &argv에 보관됩니다. *argv의 마지막 배열에 액세스하고 싶습니다. 이 경우 마지막 배열에는 &이 포함됩니다. 어떻게 접근 할 수 있습니까? strlen(argv)이 제대로 작동하지 않는 것 같습니다. 은 분명히 **argv이 포인터이기 때문에 제대로 작동하지 않습니다.

참고 : **argv을 main()의 인수로 사용하는 것이 아니므로 argc 또는 문자열 길이에 대한 다른 표시기가 없습니다.

+3

나 strlen을 종료해야하는 경우 (* 변수는 argv)! – vireshas

+0

@vreshas에서는 * argv의 마지막 배열에 액세스 할 수 없습니다. 그 길이를 보여줍니다. – darksky

+0

나는 이미 그것을 시도했다 - 작동하지 않는다. – darksky

답변

5

편집 : 맞춤 문자열 배열로 작업하도록 편집되었습니다. NULL 포인터는 배열의 끝을 나타냅니다. 이 메서드는 4 개의 문자열 배열을 선언하지만이 메서드는 동적으로 크기가 지정된 배열과 함께 사용할 수 있습니다. 이를 위해

#include <stdio.h> 

int main() 
{ 
    char* custom[4] = { "sleep", "30", "&", NULL }; 
    int last; 
    for (last = 0; custom[last + 1]; last++); 
    printf("%i - %s\n", last, custom[last]); 
    return 0; 
} 

// ./a.out 
// > 2 - & 

당신은 당신이 그것을 빌드 할 때 명시 적으로 char**에 추가 NULL 문자열을 포함하는 프로그램을 수정해야 할 것입니다, 당신을 위해 작동합니다. 이 표시기가 없으면 마지막 문자열 다음의 주소는 반드시 NULL 일 필요가 없으므로 카운트에 가비지를 포함 시키거나 세그먼트 오류를 ​​일으킬 수 있습니다.

+0

내 사용자 정의 char **에서 작동하지 않습니다. 네가 본부 출신이야. – darksky

+0

이 방법을 제대로 작동 시키려면 배열 끝 부분에 배열이 닫혀 있음을 나타내는 추가 멤버가 필요하다고 생각합니다. 나는 새로운 예를 만들 것이다. – Devourant

+0

사용자 정의 끝에 NULL이 없으면 어떻게해야합니까? –

0

argc와 같은 수를 전달하는 것이 가장 일반적인 사용법입니다.하지만 그럴 필요는 없습니다.

그런 다음 일반적인 방법은 마지막 배열 요소임을 나타 내기 위해 NULL을 가리키는 argv의 마지막 요소를 갖는 것입니다.

int argc = 0; 
while (*argv++) { 
argc++; 
} 
0

당신은 인수를 토큰 화하고 마지막으로 하나가 될 때까지 그들을 통해 일을 strtok을 사용해야 할 수도 있습니다.

Referemce for strtok.

+0

아무 것도 토큰화할 필요가 없을 때 그렇게 어리석지 않습니까? – darksky

+0

@Nayefc 다른 모든 토큰을 버려야한다면, 그렇습니다. 그러나 일반적으로 모든 인수 토큰이 어떤 방식 으로든 또는 다른 방식 으로든 소비 될 수 있습니다. –

0
char *argv[] = {"abc","123","xya"}; 

    //prints the last string 
    printf("%s",a[strlen(*a)-1]); 

// 당신은 문자열의 배열이 NULL로

char *temp = 0 ; 
    while(*argv){ 
     temp = *argv; 
     (*argv)++; 
    } 
    //temp has the last string 
+0

이렇게하면 "후행"인 "NULL"이 있다고 가정합니다.최소한 문서화되어야합니다. (이 게시물은 "main"에 인수가 아닙니다.) –

+0

-Werror로 컴파일 중입니다. 이것은 * argv ++에 이후에 사용되지 않는 오류를줍니다. – darksky

+0

(* argv) ++이 도움이됩니까? – vireshas

관련 문제