당신이 인덱스 tokenHolder[i]
, 당신이 통과 될 때 char *
isdigit()
에 char *
의 배열이며, isdigit()
하지 않습니다 : 코드의 나머지 부분의 모습에서, 당신은 정말 정의 할 포인터를 받아 들인다.
당신은 아마 두 번째 루프를 누락하거나 필요
if (isdigit(tokenHolder[i][0]))
printf("working\n");
가 줄 바꿈을 잊지 마십시오.
루프 테스트가 이상합니다. 일반적으로 '널 포인터'는 0
또는 NULL
으로 지정하고 '\0'
으로 표시하지 않습니다. 그것은 단지 사람들을 오도합니다.
또한 컴파일러 경고에주의해야합니다! 경고와 함께 컴파일되는 코드를 게시하지 마십시오. (최소한) 경고가 무엇인지 지정하여 사람들이 컴파일러에서 무엇을 말하고 있는지 볼 수 있습니다. 컴파일러가 까다로워지면서 경고가 나오지 않도록해야합니다.
토큰 배열의 값이 모두 숫자인지 테스트하려는 경우 test_integer()
함수를 사용해야 문자열을 숫자로 변환하고 변환에서 모든 데이터를 사용하지 않는지 알 수 있습니다 문자열 (또는 선행 공백과 후행 공백을 허용 할 수 있습니다). strtok()
등으로 찾은 문자열 토큰으로하려는 작업에 대한 문제 사양이 명확하지 않습니다.왜 당신이 코어 덤프 점점에 관해서는
:
isdigit에() 매크로 코드는 종종를 약
#define isdigit(x) (_Ctype[(x)+1]&_DIGIT)
당신이 포인터를 제공 할 때, 그것은 (매우 큰으로 처리됩니다 (일반적으로) 257 개의 값 배열에 오프셋을 적용하고 범위를 벗어난 메모리에 액세스하기 때문에 세그먼트 오류가 발생합니다. +1은 EOF
이 EOF
이 -1
일 때 isdigit()
으로 전달할 수 있습니다. 이는 일반적인 값이지만 필수는 아니지만 필수입니다. isdigit()
과 같은 매크로/기능은 문자가 unsigned char
—이고 대개 0..255 범위이므로 유효한 입력으로 — 또는 EOF를 사용합니다.
'tokenHolder'가'char *'의 배열 인 경우,'tokenHolder [i]! = '\ 0''는 의미가 없습니다. 'tokenHolder [i]! = NULL'와 같습니다. –
@DietrichEpp 나는 그것을 편집 해 주셔서 감사합니다. – user2757849