On Nov 9, 2010, at 1:18 AM, Peter Hosey wrote:

> http://hg.adium.im/adium/rev/ab9a06c5cc58
> 
>> Patch from an anonymous source to use bytes instead of an NSString for this 
>> raw data, thereby silencing a Clang warning about null bytes in an NSString. 
>> The bytes are simply tacked onto an NSMutableData.
> 
> ...
> 
> The output is now wrong.
> 
> Remember that C strings are null-terminated, and a C array (e.g., const char 
> []) initialized with one will include the null terminator. Therefore, the 
> C-array subn contains one more byte than the NSString subn contained 
> characters. The same is true of endn.
> 
> There are two possible fixes:
> 
> 1. Use strlen instead of sizeof.

No, this would not work since there are null bytes.

> 2. Declare an enum symbol for the desired number of characters, and use each 
> symbol both to declare the length of the corresponding array and to replace 
> the sizeof expressions.

Would this suffice?

> const char subn[] = "subn\x00\x00\x00\x01";

-->

> const char subn[] = { 's', 'u', 'b', 'n', '\x00', '\x00', '\x00', '\x01'};

Regards,
Ryan Govostes

Reply via email to