I have a function (Inet_ntop) that returns const char * and if I try to
assign that return value to a char * variable, I get the gcc error message:
warning: assignment discards qualifiers from pointer target type
Does anyone know what this warning means? Why do I get it? The program
compiles and appears to work, but I'd like to understand the warning.
Here is basically what the code looks like:
char *str;
str = Inet_ntop(...); //returns const char *
Any help is appreciated. Thanks.
--
Jason
[ jake1138 AT yahoo DOT com ] 6 95764
"Jason" <ja******@NO.SPAM.yahoo.com> wrote in message
news:bm**********@terabinaries.xmission.com... I have a function (Inet_ntop) that returns const char * and if I try to assign that return value to a char * variable, I get the gcc error
message: warning: assignment discards qualifiers from pointer target type
Does anyone know what this warning means?
It means you're walking on eggs. :-)
Why do I get it?
You have a good compiler.
The program compiles and appears to work, but I'd like to understand the warning.
The moment you try to modify what the assigned-to pointer
points to, you could possibly induce undefined behavior. Here is basically what the code looks like:
char *str; str = Inet_ntop(...); //returns const char *
It's warning you that the "protection" of the pointer's
target provided by the 'const' qualifier is lost when
the 'const' is thrown away by assigning it to a "plain"
type 'char*' pointer.
It's warning you that you're boating in deep water,
and you've thrown your life preserver overboard.
const char array[]="whatever";
array[0] = 'X'; /* compiler must tell you, "Can't do that!" */
const char *cp = array;
cp[0] = 'X'; /* compiler must tell you, "Can't do that!" */
char *p = array; /* valid, but many compilers will warn you:
"Danger, Will Robinson!" */
/* because... */
p[0]; /* is valid, although possibly/probably not what you
really wanted, and has possiblity of undefined behavior */
Any help is appreciated. Thanks.
Write:
const char *str;
str = Inet_ntop(...); //returns const char *
The function returns type 'const char*' for a reason.
It's telling you "You can look, but don't touch the
target of the returned pointer."
HTH,
-Mike
"Jason" <ja******@NO.SPAM.yahoo.com> wrote in message
news:bm**********@terabinaries.xmission.com... I have a function (Inet_ntop) that returns const char * and if I try to assign that return value to a char * variable, I get the gcc error
message: warning: assignment discards qualifiers from pointer target type
Does anyone know what this warning means?
It means you're walking on eggs. :-)
Why do I get it?
You have a good compiler.
The program compiles and appears to work, but I'd like to understand the warning.
The moment you try to modify what the assigned-to pointer
points to, you could possibly induce undefined behavior. Here is basically what the code looks like:
char *str; str = Inet_ntop(...); //returns const char *
It's warning you that the "protection" of the pointer's
target provided by the 'const' qualifier is lost when
the 'const' is thrown away by assigning it to a "plain"
type 'char*' pointer.
It's warning you that you're boating in deep water,
and you've thrown your life preserver overboard.
const char array[]="whatever";
array[0] = 'X'; /* compiler must tell you, "Can't do that!" */
const char *cp = array;
cp[0] = 'X'; /* compiler must tell you, "Can't do that!" */
char *p = array; /* valid, but many compilers will warn you:
"Danger, Will Robinson!" */
/* because... */
p[0]; /* is valid, although possibly/probably not what you
really wanted, and has possiblity of undefined behavior */
Any help is appreciated. Thanks.
Write:
const char *str;
str = Inet_ntop(...); //returns const char *
The function returns type 'const char*' for a reason.
It's telling you "You can look, but don't touch the
target of the returned pointer." If you ignore this
warning, you're on your own.
HTH,
-Mike
On 2003-10-08, Jason <ja******@NO.SPAM.yahoo.com> wrote: char *str; str = Inet_ntop(...); //returns const char *
You should declare str variable to be the same type as that being
returned by Inet_ntop().
const char *str = Inet_ntop(/* ... */);
The "const" is a qualifier. It means the return value of Inet_ntop
is a pointer to data that should not be modified.
However, in the erroneous code, you assigned that pointer to a
regular "char *", which discards the "should not be modified"
qualifier.
-- James
Thanks Mike and James for your answers! I think I was confused as to how
const worked with pointers in that way, but now I understand.
--
Jason
[ jake1138 AT yahoo DOT com ]
"Jason" <ja******@NO.SPAM.yahoo.com> wrote in message
news:bm*********@terabinaries.xmission.com... Thanks Mike and James for your answers! I think I was confused as to how const worked with pointers in that way, but now I understand.
It can get confusing. :-)
/* (0) */ int * pi; /* pointer to int */
/* (can modify p or *p) */
/* (1) */ int const * pci; /* pointer to const int */
/* (can modify p, but not *p) */
/* (2) */ const int * pci2; /* same as (1) */
/* (3) */ int * const cpi; /* const pointer to int */
/* (can modify *p, but not p */
/* (4) */ int const * const cpci; /* const pointer to const int */
/* (cannot modify p nor *p) */
/* (5) */ const int * const cpci2; /* same as (4) */
HTH,
-Mike
"Mike Wahler" <mk******@mkwahler.net> wrote in message
news:Z_*****************@newsread4.news.pas.earthl ink.net... /* (4) */ int const * const cpci; /* const pointer to const int */ /* (cannot modify p nor *p) */
/* (5) */ const int * const cpci2; /* same as (4) */
Dang, that's what I get for 'copy-n-pasting' :-)
Of course the 'p' and '*p' in the comments refer to
the actual identifier in each declaration
('pci', 'cpi', etc.)
Sorry about that.
-Mike This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Charlie Zender |
last post by:
Hi,
I am unable to compile a large body of code with extremely pedantic
compile time checks activate, so that warnings cause errors.
With GCC 3.3.1, I do this with
gcc -std=c99 -pedantic...
|
by: Daniel Rudy |
last post by:
Hello,
Consider the following code fragment:
fileptr = fopen(param->filename, "r");
if (fileptr == NULL)
{
error("digest.c: digest_file: Open File ", errno);
return(-2);
}
|
by: mdh |
last post by:
Hi All,
Happy Solstice!
May I ask the following.
The following is a brief excerpt of a practice program.
main(...){
if (argc 1 && mystrcomp(argv, "-n") == 0) /* argv is "-n" /
******/...
|
by: Pietro Cerutti |
last post by:
i Group,
to my understanding, defining a function parameter as "const" means that
the function is not going to change it.
Why does the compiler says "return discards qualifiers from pointer...
|
by: lovecreatesbea... |
last post by:
Gcc only gives out a warning: `assignment discards qualifiers from
pointer target type' against code such as following:
$ type a.c
int main(void)
{
const char *pc;
char *p = pc;
|
by: lovecreatesbea... |
last post by:
I'm getting `warning: return discards qualifiers from pointer target
type' at line 11 on this code from gcc.
Some people suggested in old posts that this kind of warning can be
suppressed by...
|
by: somenath |
last post by:
Hi All,
I have one question regarding the code.
#include<stdio.h>
char *f1(void);
char *f1(void)
{
char *abc ="Hello";
|
by: Andre |
last post by:
Hi All,
When I compile the following piece of code with gcc, I get 3 "warning:
initialization discards qualifiers from pointer target type" messages
which refer to the 3 lines marked in the...
|
by: James H. Newman |
last post by:
I have a portion of code along the following
lines:
volatile unsigned char x ;
unsigned int f(unsigned char *y) ;
When I do
unsigned int z = f(&x) ;
|
by: DolphinDB |
last post by:
Tired of spending countless mintues downsampling your data? Look no further!
In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
|
by: ryjfgjl |
last post by:
ExcelToDatabase: batch import excel into database automatically...
|
by: Vimpel783 |
last post by:
Hello!
Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
|
by: jfyes |
last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
|
by: ArrayDB |
last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
|
by: Shællîpôpï 09 |
last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
|
by: af34tf |
last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
|
by: Faith0G |
last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome former...
| |