2013-04-19 3 views
0

나는 인터뷰 질문을 탐색하고 포인터를 사용하여 문자열을 뒤집어 놓았습니다. 하지만 여기에서는 문자열 길이를 제한하는 char string [100]을 정의했습니다. 나는 C에별로 익숙하지 않습니다. 어떻게 수정하여 길이의 문자열로 만드나요? 대신 정적 배열 사용하는 동적 메모리 할당C에서 포인터를 사용하여 길이가 다른 문자열을 뒤집기

#include<stdio.h> 

int string_length(char*); 
void reverse(char*); 

main() 
{ 
    char string[100]; 

    printf("Enter a string\n"); 
    gets(string); 

    reverse(string); 

    printf("Reverse of entered string is \"%s\".\n", string); 

    return 0; 
} 

void reverse(char *string) 
{ 
    int length, c; 
    char *begin, *end, temp; 

    length = string_length(string); 

    begin = string; 
    end = string; 

    for (c = 0 ; c < (length - 1) ; c++) 
     end++; 

    for (c = 0 ; c < length/2 ; c++) 
    {   
     temp = *end; 
     *end = *begin; 
     *begin = temp; 

     begin++; 
     end--; 
    } 
} 

int string_length(char *pointer) 
{ 
    int c = 0; 

    while(*(pointer+c) != '\0') 
     c++; 

    return c; 
} 
+0

아마도 도움이 될까요? http://stackoverflow.com/questions/2505451/how-to-read-unlimited-characters-in-c –

+0

'length' ('string_length'의 결과)를' 끝 '. – BLUEPIXY

+0

이 부분은 문제가 아니므로 문자열 질문을 읽는 중 "역 문자열"질문이 아닙니다. – unkulunkulu

답변

1

: char *tab = malloc(n * sizeof(char))n 원하는 길이를 나타내는 일부 변수이다.

+0

그렇게 쉽지는 않습니다. 이것은 여전히 ​​읽을 수있는 문자의 양을 제한합니다. 메모리는 다른 위치에 쌓여 있습니다 (스택 대신 힙에 있음). –

+0

그러나 그것은 definitelly 한계를 푸시합니다. 궁극적 인 해결책은 파일에서 입력을 읽고 파일에 출력을 작성하는 것이지만 원하는 솔루션은 아닌지 의심 스럽습니다. – Adrian

+1

@BartFriederichs 읽을 수있는 문자의 양을 제한하는 방법을 친절하게 설명 할 수 있습니까? –

1

사용자가 런타임에 크기를 결정하거나 입력하기를 원하면 malloc()을 사용할 수 있습니다.

malloc()

0

동적 메모리 할당은 .. 해결책은 .. 문자열에 대한 포인터를 가지고 메모리가 동적으로 ..이이 문제를 해결할 것입니다 .. 실행시 할당 할당입니다

char *str; 
str = (char*)malloc(n *sizeof(char)); 

참고 : 캐스팅은 선택 사항이며 'n'은 필요한 길이입니다 (사용자 입력이 가능함).

관련 문제