2017-12-21 1 views
-3

에서 문자열 배열을 반환하는 방법 :C 언어 : 그래서 난이 사용자의 입력이 기능

char usercommand[512]; 
fgets(usercommand, 512, stdin); 

을 그리고 난 공간에 의해이 줄을 분할하고 내 array을 채우려.

char arguments[2]; 

그리고이 function : 그래서 나는이 array

void parseuserinput(char *c, char *arr) 
{ 
    int i = 0; 
    char * pch; 
    pch = strtok(c, " "); 
    while (pch) 
    { 
     arr[i] = pch; 
     i++; 
     pch = strtok(NULL, ""); 
    } 
} 

사용법 : 내가 볼 수 있지만

parseuserinput(usercommand, arguments); 

그리고 내 array는 여전히 비어 나의 function parseuserinput 요소를 내에 삽입하십시오. 0.

+0

1)'char arguments [2]; '가 너무 작습니다. 'char arguments [200];을 시도해보십시오; 2)'parseuserinput()'는'arr' 문자를 null로 끝내지 않습니다. 3) "내 배열은 여전히 ​​비어 있습니다."-> 그 코드를 게시하십시오. 4) 게시물 입력이 사용되었습니다. – chux

+0

2 요소만으로도 충분합니다 –

+3

'char * arguments [2];를 의미합니까? – AntonH

답변

1

char 유형의 변수에 포인터 값을 저장하고 있습니다. 그런 다음 문자열의 일부를 가리키고 있습니다. 가능한 해결책은 char* arguments[2]을 사용하고 strdup()을 사용하여 문자열을 복제하고 중복 된 문자열의 주소를 char *[]에 저장하는 것입니다. 여기

void parseuserinput(char *c, char *arr[]) 
{ 
    int i = 0; 
    char * pch; 
    pch = strtok(c, " "); 
    while (pch) 
    { 
     arr[i] = strdup(pch); 
     ... 
    } 
} 

, 우리는 pch하고 저장 가리키는 토큰 화 string의 각을 복제했다. 배열 char*의 배열이 배열의 첫 번째 요소에 대한 포인터로 붕괴되면 우리는이 배열을 변경하여에서 값을 반환하는 을 실현할 수 있습니다.

그리고 char*[]의 몇 포지션이 채워 졌습니까? 숫자가 i이고이 숫자가 i 인 경우는 char* 배열의 요소 수가 올바르게 채워 졌음을 나타냅니다. 함수에서 반환하여 정확하게 채워지는 요소의 수에 대한 호출 수신자 함수에 아이디어를 제공 할 수 있습니다.

int parseuserinput(char *c, char *arr) 
{ 
    ... 
    return i; 
} 

strdup - 반환 값을 확인하고 작업을 완료하면 무료로 반환합니다.

관련 문제