2012-01-16 3 views
-2

네트워크 데이터의 페이로드를 "새 줄"또는 "줄 바꿈"문자 (10 진수, 16 진수 0x0A)로 분할해야했습니다. 그래서 strtok() 함수를 사용하여 몇 가지 문제가 발생했습니다. const char 문자열을 "new line"문자로 만들고 싶었습니다.const char *에서 strtok() 구분 기호로 보이지 않는 문자

프로토 : 이것은 잘못된 초기화했다

`strtok(char * StringToSplit, const char * Delimiters)` 

:이 캐스팅없이 INT에서 포인터를 만드는 방법에 대한 경고했다

`const char delim[] = 10;` 

을; Allthough는
printf("Delim: %x", delim)

는 strtok를에 사용 DELIM (0xa는)의 정확한 값 앱 충돌()을 나타내었다.

`const char * delim = 10;` 

없음 경고 또는 오류

,의 printf (내가하지만, 예상대로) ("DELIM %의 X", DELIM는) 올바른 값 하지만 strtok를()를 작동하지 않았다했다.
`char delim = 10;` 
`(ofc strtok(..., &delim))` 

일을 할 것 같았다하지만 난 여전히 CONST 문자의 PTR은() 함수를 strtok를 할 것으로 예상 된 비 const를 숯불 PTR 전달에 대해 경고를 받았습니다.

`char delim[] = "#";` 
`delim[0] = 10;` 

마지막으로이 경고없이 작동하는 것 같다.

`char tmp[] = "#";` 
`tmp[0] = 10;` 
`const char *delim = tmp;` 

질문은 strtok를() 함수와 같은 보이지 않는 문자를 전달하는 가장 간단하고 우아한 방법으로 무엇을 할 것입니까? 제게 이것은 단지 코드가 엉망인 것처럼 느껴집니다.

답변

0

그것은 엉망이 아니거나 우아하지 않은데, 많은 버그가 있습니다.

const char delim[] = 10; 

왜 여기 배열을 선언입니까? 이되어야한다 : 다음

const char delim = 10; 

그리고 :

char delim[] = "#"; 

가 왜 배열을 선언하고 문자열에가 동일하게 설정하는?이 수 shuld :

char delim = '#'; 
1

당신이 필요합니다

const char *delim = "\n"; 

두 번째 매개 변수는 구분 기호를 포함하는 C 문자열이어야합니다. 다양한 화신에서 가지고있는 것은 이 C 문자열로 잘못 캐스팅되는 C 문자열이 아니라는 점입니다.