2010-08-11 5 views
0

\ 0으로 끝나는 문자열을 TCP 소켓에 보내려고하지만 \ 0이 목적지에 도달하지 않는 것 같습니다. 0으로 NSString 보내기

이 코드를 사용 :

NSString* [email protected]"<b/> \0_"; 

uint8_t *buf = (uint8_t *)[s UTF8String]; 

int resCode = [outputStream write:buf maxLength:strlen((char *)buf)]; 

는 난 단지 @"<b/> "을 보낼 것 같다. 아마도 \0uint8_t의 끝으로 간주됩니다.

누군가 어떻게해야하는지 말해 줄 수 있습니까 ?? \ 0 '문자는 항상 종료 문자로 처리됩니다

+3

NSString을 사용하여 데이터를 보내지 마십시오. NSData 또는 바이트 버퍼를 사용하십시오. – bbum

+0

문자열의 작동 방식에 대한 정보를 실제로 확인해야합니다. 특히 문자열이 어떻게 이스케이프되는지, 그러면 strlen이 유효한 길이를 반환하지 않는 이유를 알 수 있습니다. – miho

답변

4

물론 \ 0없이 전송합니다. strlen은 널 (NULL) 종료자를 포함하지 않고 문자열의 길이를 리턴합니다.

[outputStream write:buf maxLength:(strlen((char *)buf) + 1)]

+0

문제는 NSString 클래스와 아무 관련이 없다고 추가 할 수 있습니다. 단, C의 문자열 함수를 이해해야합니다. 또한 NUL 문자로 NSString을 종료 할 필요가 없습니다. 이것은 UTF8String으로 끝납니다. –

+0

\ 0 문자는 NSString을 종료하는 것이 아니라 서버에서 명령을 종료하는 데 사용됩니다. @sha : 고마워, 그것은 매력처럼 작동했다.) – Daniel

+0

@dkk 'UTF8String'은 null로 끝나는 C 문자열을 반환하기 때문에'NSString'에 그 문자를 추가 할 필요가 없다. –

-2

왜'때문에

당신은 다른 문자를 ... 사용할 수 없습니다 ..... 당신의 문자열에서] 0] 문자 '를 보내고 싶어 !

그리고 정말로 그런 식으로 보내고 싶다면 다른 문자를 보내고 수신하면 '\ 0'에 매핑하십시오!

+0

수신자가 이미 그렇게 구현 되었기 때문에 그럴 수 없습니다. 그리고 다른 응용 프로그램과 함께 사용되고 있습니다. – Daniel

+0

문자열 io의 종료 문자로 \ 0을 사용하는 것이 완벽하고 일반적입니다. –