Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Initialization discards qualifiers from pointer target type

Tags:

c

linked-list

I'm trying to print the list of a singly linked list that I referred to in link text. It works, but I do get the compiler warnings:

Initialization discards qualifiers from pointer target type

(on declaration of start = head) and

return discards qualifiers from pointer target type

(on return statement) in this code:

/* Prints singly linked list and returns head pointer */ LIST *PrintList(const LIST *head)  {     LIST *start = head;      for (; start != NULL; start = start->next)         printf("%15s %d ea\n", head->str, head->count);      return head; } 

I am using XCode. Any thoughts?

like image 522
Crystal Avatar asked Feb 23 '10 05:02

Crystal


2 Answers

It's this part:

LIST *start = head; 

The parameter for the function is a pointer to a constant, const LIST *head; this means you cannot change what it is pointing to. However, the pointer above is to non-const; you could dereference it and change it.

It needs to be const as well:

const LIST *start = head; 

The same applies to your return type.


All the compiler is saying is: "Hey, you said to the caller 'I won't change anything', but you're opening up opportunities for that."

like image 133
GManNickG Avatar answered Sep 22 '22 13:09

GManNickG


In following function, would get the warning that you encountered with.

void test(const char *str) {   char *s = str; } 

There are 3 choices:

  1. Remove the const modifier of param:

    void test(char *str) {   char *s = str; } 
  2. Declare the target variable also as const:

    void test(const char *str) {   const char *s = str; } 
  3. Use a type convert:

    void test(const char *str) {   char *s = (char *)str; } 
like image 30
user218867 Avatar answered Sep 23 '22 13:09

user218867