문제는 군단입니다.
문자열 "1-2-3-4"
이 읽기 전용 메모리에 저장되어 있으므로 strtok()
이 (첫 번째 토큰을 분리하기 위해) 수정하면 프로그램이 충돌하기 때문에 코어 덤프가 발생할 것으로 예상됩니다. 충돌은 strtol()
에 있습니다. strtok()
의 반환 값이 NULL임을 제안합니다.
strtok()
의 첫 번째 호출은 문자열을 인수로 사용합니다. 두 번째 호출은 그 자리에 NULL을 전달하여 '지난 시간에 중단 한 부분부터 계속'을 나타냅니다. 서면으로 문자열이 수정 가능한 경우 1
을 네 번 파싱합니다.
이 (안된하지만) 수정 가까운 :
일반적으로
char input[] = "1-2-3-4";
char *data = input;
for (int i = 0; i < 4; i++)
{
char *token = strtok(data, "-");
if (token != 0)
{
long int a = strtol(token, NULL, 10);
cout << a << endl;
}
data = NULL;
}
, 당신은 strtol()
에서 오류 검출을 할 필요가; 더구나, 이렇게하는 것은 아주 혼란 스럽습니다. 그러나 샘플 문자열을 사용하면 걱정할 필요가 없습니다.
당신이 나를 이길이 시간! =) –
아 ~; 당신이 어떤 것을 이기면, 당신은 약간을 잃습니다. 최대 득표를하십시오. –