12
votes

I have sequences of characters I'm feeding to a decoding function:

For example:

"\x05three"

(Yes, that's a Pascal-style string. The function translates length-prefixed strings to null-terminated strings.)

I wrote a few test cases, among which:

"\x04four"

And to my surprise, that came out as "Oour". Looking closer, it turns out that the specification on escape sequences for Visual Studio allows that, my sequence is basically interpreted as \x04f, which would be 79 in base 10 (thus my resulting string becomes "Oour", 79 being 'O')

My solution was simply to split the string:

"\x04" "four"

The question: Is there another way to escape or terminate an escape sequence?

2
0x04f is 4*16+15 = 79, so 'O'. - Daniel Fischer
0x4f (hex) is 79 in decimal, which is the letter "O". 80 in decimal (not 0x80 which is a hex number) is the letter P. 0x80 is 128 decimal, which is not a standard ascii character - Joseph Stine
Thank you both. I'm ashamed now. I wonder if I grabbed the decaf tin this morning... - MPelletier
There you see the dangers of even having a decaf tin. - Daniel Fischer

2 Answers

5
votes

Yes, you cant try "\004four" for instance. Actually, even "\04four" will probably do, because f is not an octal number.

0
votes

You just write strings next to each other:

char a[3] = "1\02"   // {'1', '\2', '\0'}  
char a[4] = "1\0""2" // {'1', '\0',  '2', '\0'}

sizeof("1\02") // 3
sizeof("1\0""2") // 4