const char*

Stephen R. van den Berg berg at marvin.e17.physik.tu-muenchen.de
Fri May 3 18:56:38 AEST 1991


Someone posted something on strchr lately, I couldn't exactly distill what
they/he/she meant.

To make the problem a bit more clear, I have included a real life problem.
What to do with the following program?
---------------------------------------------
char*findblank(const char*p){
 while(*p&&*p!=' ')
   p++;
 return p;}

main(){char*a;
 strcpy(a,"Hello there!");
 *findblank(a)='.';
 puts(a);
 return 0;}
---------------------------------------------
The compiler issues a warning for trying to return a (const char*), which
should have been a (char*).  But from the viewpoint of the function, this
is exactly what is intended.  "const char*p" is meant to be "const" because
the function findblank() does not touch the characters in the string, however,
the function findblank() does not want to impose any restrictions on any
calling programs, i.e. calling programs may very well choose to change
the string.

How do I solve this?  Can it not be solved? (i.e. the warning can not be
avoided, and we have to live with it until compilers get more intelligent and
understand the program they're compiling.)

Should we change the "return p;" into "return (char*)p;"?  (though, that
seems a bit awkward, since we weren't doing anything 'illegal' in the first
place.)
--
Sincerely,                 berg at marvin.e17.physik.tu-muenchen.de
           Stephen R. van den Berg.
"I code it in 5 min, optimize it in 90 min, because it's so well optimized:
it runs in only 5 min.  Actually, most of the time I optimize programs."



More information about the Comp.std.c mailing list