Vlearns
asked on
simple C question
Hi
I am looking at some legacy c code and i have come across
list += temp + "\05" + " 0" + "\02";
what is "\05" , "\02"
are these hex constants, binary constants, octal constants ?
thanks
I am looking at some legacy c code and i have come across
list += temp + "\05" + " 0" + "\02";
what is "\05" , "\02"
are these hex constants, binary constants, octal constants ?
thanks
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
http://www.csgnetwork.com/asciiset.html
Hi Vlearns,
>> list += temp + "\05" + " 0" + "\02";
This isnt valid C. It might be C++ but not C.
This would be:
list += temp + '\05' + '0' + '\02';
But even that seems wrong because that would be the same as:
list += temp + 5 + '0' + 2;
Are you sure you copied it right?
Paul
>> list += temp + "\05" + " 0" + "\02";
This isnt valid C. It might be C++ but not C.
This would be:
list += temp + '\05' + '0' + '\02';
But even that seems wrong because that would be the same as:
list += temp + 5 + '0' + 2;
Are you sure you copied it right?
Paul
Hi Vlearns,
That isn't legal syntax in modern C. "\05" is not a character or integer value, it is a string pointer. The keyword here is pointer.
As legacy code, it MAY have worked on old 8 and/or 16 bit systems, but it certainly isn't ANSI C in today's world.
However, replacing the double quotes with single quotes is a different matter. (Note the spaced deleted from the " 0" string.)
list += temp + '\05' + '0' + '\02';
In this case, the \05 and \02 are treated as octal contants so 5 and 2 are added to '0', giving the ASCII character '7'.
Good Luck!
Kent
That isn't legal syntax in modern C. "\05" is not a character or integer value, it is a string pointer. The keyword here is pointer.
As legacy code, it MAY have worked on old 8 and/or 16 bit systems, but it certainly isn't ANSI C in today's world.
However, replacing the double quotes with single quotes is a different matter. (Note the spaced deleted from the " 0" string.)
list += temp + '\05' + '0' + '\02';
In this case, the \05 and \02 are treated as octal contants so 5 and 2 are added to '0', giving the ASCII character '7'.
Good Luck!
Kent
Snap! :-)
Vlearns, yeah I forgot.. as others said, it is valid only in C++ using string class.
It could be the tragic, pointless addition of string pointers :D
it depends on whether this is compiled by a C compiler or a C++ compiler.
list += temp + "\05" + " 0" + "\02";
If it is a C compiler, then the code doesnt make any sense, as others have noted, adding double quoted strings doesnt do anything useful in C. You end up with the sum of the addresses of some short strings, which is of no use that I can fathom.
If it's a C++ compiler, then it does make sense if "list" and "temp" are string-type variables. Although the constants are might peculiar- an escaped zero is just a zero, and doesnt need the escaping.
Maybe you can give us some more info, like the type of compiler, the name of this file, (.c or .cpp or what), the types of list and temp.
list += temp + "\05" + " 0" + "\02";
If it is a C compiler, then the code doesnt make any sense, as others have noted, adding double quoted strings doesnt do anything useful in C. You end up with the sum of the addresses of some short strings, which is of no use that I can fathom.
If it's a C++ compiler, then it does make sense if "list" and "temp" are string-type variables. Although the constants are might peculiar- an escaped zero is just a zero, and doesnt need the escaping.
Maybe you can give us some more info, like the type of compiler, the name of this file, (.c or .cpp or what), the types of list and temp.
Here, let me back up everyone who has said this isn't valid C:
Pointer addition is invalid per §6.3.6 of ANSI 9899.
Pointer addition is invalid per §6.3.6 of ANSI 9899.
"\05", " 0" and "\02" are all string literals - the first and the last are arrays containing one character each: '\05' and '\02', respectively. (Which are octal character constants representing the ASCII characters ENQ and STX, respectively, as per mgh's reference.) The one in the middle is a two-character array containing the characters ' ' (the space) and '0' (the digit).
Maybe they are all character constants, and the one in the middle is a mistranslated \00?
Maybe they are all character constants, and the one in the middle is a mistranslated \00?