2014-03-06 2 views
0

키보드에서 사용자가 알 수없는 양의 문자열을 가져와 입력 된 모든 문자열을 가리 키도록 문자열 포인터의 배열을 설정해야합니다. I 모두에 대한 포인터를 보유 할 배열되는 char *str_arr[]에 메모리를 할당하려는 그 후C에서 실시간으로 사용자가 입력 한 문자열에 메모리를 할당하는 방법은 무엇입니까?

printf("Enter string number %d\n",num_of_strngs+1); 
fflush(stdin); 
scanf("%s",tmp_strng); 

:

는 다음 코드를 사용하여 사용자가 입력 한 문자열을 보유하는 변수 char tmp_strng[] 정의 현. 처음에는 검사와 메모리 할당을 수행

정말 작동하지 않습니다
if((tmp_str_arr[num_of_strngs]=realloc(str_arr,strlen(tmp_strng)))==NULL) 
     { 
      free(str_arr); 
      printf("Error: couldn't allocate memory. Exiting."); 
      return 1; 
     } 
str_arr[num_of_strngs]=tmp_str_arr[num_of_strngs]; 
str_arr[num_of_strngs++]=tmp_strng; 

... 여기 누구 잘못 (또는 오른쪽) 무엇을 말해 줄 수? 가능한 한 많이 realloc()과 scanf()를 주요 함수로 사용하고 싶습니다.

+0

'fflush (stdin)'은 정의되지 않은 동작입니다. (일부 구현에서는 작동 할 수도 있지만) –

+0

질문을 이해하기에 충분한 코드가 아닙니다. 'num_of_strngs','str_arr','tmp_str_arr'을 보여주세요. –

+0

배열을 다시 할당 할 수 없습니다. 그들은 선언 된 크기로 고정됩니다. – TerraOrbis

답변

0

기능을 사용하면 getline() 기능을 사용하면 자동으로 malloc() 회선을 유지하는 데 충분한 메모리가 사용됩니다. 사용법은 다음과 같습니다

char* line = NULL; //Setting this to NULL is important! 
size_t bufferSize; 
size_t characterCount = getline(&line, &bufferSize, stdin); 
if(characterCount == (size_t)-1) { 
    //error handling 
} else { 
    //do something with this line 
    free(line); 
} 

getline() 기능은 POSIX-2008 표준의 단지 asprintf() 같은 부분입니다.

+0

에 설정하십시오.'getline'은'ssize_t'를 반환합니다. 이것은 -1을 반환 할 수 있기 때문에 중요하며 <0에 대한 검사는'size_t '에서 의미가 없습니다. –

+0

@EdS. 아, 잘 잡아, 고마워! 고쳤다. – cmaster

관련 문제