2013-07-26 2 views
4

내 목표는 "A1234"과 같은 문자열을 값 1234long으로 변환하는 것입니다. 내 첫 번째 단계는 단지 long"1234" 변환, 그리고 그 예상대로 작동합니다strtol 및 포인터를 사용하여 문자열을 long으로 변환

#include <stdio.h> 
#include <stdlib.h> 
int main(int argc, char **argv) 
{ 
    char* test = "1234"; 
    long val = strtol(test,NULL,10); 
    char output[20]; 
    sprintf(output,"Value: %Ld",val); 
    printf("%s\r\n",output); 
    return 0; 
} 

가 지금은 포인터에 문제가 및 문자열의 시작 부분에 A을 무시하려합니다. 그러나 나는 프로그램을 충돌하는 char* test = "A1234"; long val = strtol(test[1],NULL,10);을 시도했다.

정확한 지점을 가리 키도록 설정하려면 어떻게해야합니까?

답변

7

당신은 거의 옳습니다. 당신은하지만, strtol에 대한 포인터를 전달해야

long val = strtol(&test[1], NULL, 10); 

또는

long val = strtol(test + 1, NULL, 10); 

당신에게 문제를 이야기 한 것입니다 일부 컴파일러 경고 플래그 켜기.

example.c:6:23: warning: incompatible integer to pointer conversion passing 
     'char' to parameter of type 'const char *'; take the address with & 
     [-Wint-conversion] 
    long val = strtol(test[1],NULL,10); 
         ^~~~~~~ 
         & 
/usr/include/stdlib.h:181:26: note: passing argument to parameter here 
long  strtol(const char *, char **, int); 
          ^
1 warning generated. 

및 GCC에서 : : 예를 들어, 그 소리에서 (심지어 추가 특별한 플래그)

example.c: In function ‘main’: 
example.c:6: warning: passing argument 1 of ‘strtol’ makes pointer from integer 
without a cast 

편집 주 : 나는 초보자들은 잘 왜 이러한 오류 메시지에서 볼 수 있다고 생각 GCC보다는 clang을 사용하는 것이 좋습니다.

관련 문제