 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
dstevel Guest
|
Posted: Sat Aug 12, 2006 9:10 am Post subject: strtol const-ness problem |
|
|
The signature for strtol is:
strtol( const char*, char**, int)
So.. if we start with a passed "const char*" (pointer to const char),
then we can't create a non-const char pointer pointer to that const
char pointer as in:
void func( const char* a )
{
// ERROR: invalid conversion from `const char**' to `char**'
char** pa = &a;
int i = strtol( a, pa, 10 );
}
And here is another way of saying the same thing without temporary
variables.
void func( const char* a )
{
// ERROR: invalid conversion from `const char**' to `char**'
// ERROR: initializing argument 2 of `long int strtol...
int i = strtol( a, &a, 10 );
}
But you CAN do:
void func( const char* a )
{
int i = strtol( a, (char**)&a, 10 ); // OK
}
AND you can also do this:
void func( const char* a )
{
char* tmp;
int i = strtol( a, &tmp, 10 ); // OK
a = tmp;
}
This indirectly allows us to modify the original const char* a through
the new pointer tmp since tmp will point into the character array a. It
doesn't involve a hard cast, but it seems just as dangerous or even
more so because it's not obvious what just happened. The calling
function could see a change in the string pointed to by a, even though
it's passed as pointer to const.
Can someone help me figure out why this is OK? |
|
| Back to top |
|
 |
Powered by phpBB © 2001, 2006 phpBB Group
|