2017-09-14 3 views
-2
#include <stdio.h> 

#include <stdlib.h> 

static void get_string(char *ac) 
{ 
    ac = (char *)malloc (1 * sizeof (char)); 
    printf("Enter the string to count vowels and consonants in a string using pointers: "); 
    scanf("%s", ac); 
} 

main(int argc, char *argv[]) 
{ 
    char *ac = NULL; 
    get_string(ac); 
    printf("The Entered string is:%s", ac); 
    for(;;); 
} 

함수 스택에서 입력 된 문자열을 가져올 수 없습니다. null을 반환합니다. 누구든지 디버그에서 나를 도울 수 있습니까?함수 스택에서 입력 된 문자열을 가져올 수 없습니다.

+0

** 1 ** 문자에만 공백을 할당하는 경우 정확히 어떤 문자열이 필요합니까? – StoryTeller

답변

1

C의 함수 인수는 값으로 전달됩니다. 호출 된 함수 내부에서 매개 변수를 변경하면 함수 호출시 제공된 실제 인수에 반영되지 않습니다. 귀하의 경우에는

, 당신 포인터 - 투 - ac을해야하는, ac 자체를 (가 가리키는 메모리 위치의 콘텐츠가 아닌)를 변경하는를 원하므로. Please see this discussion on why not to cast the return value of malloc() and family in C..

  • sizeof(char)

    • 가 C에 1이 보장되는 것을 특징으로

      , 1 바이트의 메모리 할당은 빈 문자열을 저장할 수

    • 승수로 사용할 필요, 즉 없습니다 아마 무의미한 (그리고 잘못된) 코드.
  • +0

    그러면 코드에서 수행해야 할 수정 사항은 무엇입니까? – jiju

    +0

    입력에 대한 적절한 길이의 Mallocate (256, 말), scanf() 형식 문자열에서 [length-1] 너비를 사용하고 get_string()에서 문자열을 char *로 반환하거나 double -pointer 인수/매개 변수는 할당 된 포인터가 호출자에게 다시 전달되도록합니다. 가장 쉬운 방법. –

    +0

    오 - 그리고 main()에서 printffing 한 후 char *를 free()합니다. –

    관련 문제