2012-10-24 3 views
2

에서 정수로 :포인터가 내 코드 C

char str[] =""; 
scanf("%s",&str); 
char * pch; 
pch = strtok (str,"#"); 
printf ("%s\n",pch); 
return 0; 

I는 두 번째와 세 번째 처음 세 정수 "1 # 2 # 3」의 입력을 렌더링해야한다. 위의 코드는 첫 번째 변수 만 처리하고 첫 번째 문자열 "1"을 출력하지만 int 변수에 저장하려고합니다.

내가 시도 :

int first = atoi(&pch) 

그러나 '첫 번째'내가 배열 문자의 포인터를 분석 할 수있는 방법 1 대신 0의 값을 int로 일인데?

+0

그것은'될 것 while 루프에서 사용할 필요가 atoi 함수 (PCH)'하지'atoi 함수 (PCH)' –

답변

4

로 전화, 당신은 크게이 문제를 단순화 할 수 있습니다 :

다음
scanf("%d#%d#%d", &a, &b, &c); 

link to a demo on ideone이다.

+0

+1을 사용하십시오. – hmjd

+0

굉장합니다. – Tom

4

str은 입력을 처리하기에 충분하지 않으므로 코드에 정의되지 않은 동작이 있습니다. str은 최대 1 char을 보유 할 수 있으며 scanf()은 문자열을 읽을 때 널 종결자를 추가합니다. 사용자가 단일 문자를 입력하고 return을 누르면 scanf()은 범위를 넘어 배열 str을 쓸 것입니다.

은 수정 허용 문자열의 최대 길이를 결정하고 더 읽어 scanf()을 방지하기위한 방법은 다음과 같습니다 atoi()가 도움이하지 않은, 잘못된 입력 또는 "0"에 대한 0의 결과를 생성

char str[1024]; 
if (1 == scanf("%1023s", str)) 
{ 
} 

하는 것으로. 더 간단하게 해결하려면 strtol()을 사용하거나 dasblinkenlight의 대답을 참조하십시오.

1

char*char**이 아닌 atoi()에 전달합니다. 당신이 입력의 정확한 레이아웃 및 int의 정확한 수를 알고 있다면 그냥 atoi(pch)

0

str을 char str [] = "";로 선언했습니다. 이렇게하면 str에 1 바이트 만 할당됩니다. 제대로 작동하고 있습니까? 나는 여기서 뭔가를 놓치지 않기를 바란다. strtok를에 관해서는
, 당신은
pch = strtok (str,"#");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, "#");
}

관련 문제