2014-09-12 5 views
1

난 char 배열을 delimate하는 방법을 배우고 다른 변수로 숫자 및 문자열을 분할하고 그들을 인쇄 작업을 할 필요가. 나는 내가 가까이에 있다고 믿지만, 내 번호가되어야하는 것을 인쇄 할 때 나는 미친 숫자를 얻는다. 이것은 int에 대한 주소입니까? 어떤 조언을 크게 주시면 감사하겠습니다! 내 코드 및 입력/출력 :strtok 및 int 대 char in C

#include <stdio.h> 

    int main() { 
     setbuf(stdout, NULL); 
     char name[10]; 
     printf("Enter in this format, integer:name\n"); 
     fgets(name, 10, stdin);       //my input was 2:brandon 
     char *n = strtok(name, ":"); 
     int num = (int)n; 
     char * order = strtok(NULL, ":"); 
     printf("%d,%s", num,order);      //my output was 7846332,brandon 
     return (0); 
    } 

답변

3

이 줄은 올바르지 않습니다

int num = (int)n; 

이가 INT의 주소인가?

아니, 그것은 당신의 정수의 문자 표현이 저장되는 위치, int (즉이있을 수 있습니다 절단 된 주소로 재 해석의 문자 버퍼의 주소입니다 거의 의미없는 그것을 만들기 번호).

당신은 값을 구문 분석, 또는 atoi 사용하여 어느 int로 변환 할 수 있습니다

int num = atoi(n); 
일반적으로

Demo.

+0

'strtol 함수를()'atoi 함수'보다 더 나은 선택()'때문에 strtol 함수 더 유연하고 atoi는 오류보고에 대해 절름발이입니다. –

+0

달콤한 이제 고마워! – Branbron

+0

@ John Hascall 좋은 오류 처리의 가능성 때문에'strtol()'이'atoi()'보다 낫다. 그러나 그것은'errno = 0; char * endptr; 긴 tmp = strtol (n, & endptr, 10); if (endptr == n) Handle_NoConversion(); if (errno || tmp INT_MAX) Handle_Overflow(); n = (int) tmp;' – chux

3

포인터 n문자열"123"을 가리 킵니다. 정수로 포인터를 캐스팅 할 때 정수 값은 변수 n의 값이며 이는 strtok에 의해 반환 된 문자열이있는 메모리의 주소입니다.

숫자가 포함 된 문자열을 실제 숫자로 변환하려면 예 : strtol 기능 :

int num = strtol(n, NULL, 10);