Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Pointer incompatible type assignment to character.

Reply
Thread Tools

Pointer incompatible type assignment to character.

 
 
gk245
Guest
Posts: n/a
 
      04-19-2006
I have something like this:

#include <stdio.h>

main ()
{
struct line
{
char write[20];
char read[20];

struct line *next;
};

struct line n1;

n1.write= "concepts";

}

However, if i try to compile it, i get a compiler error saying that
"incompatible types in assignment". Whats strange is that if i set
write as an integer, i don't get such a error and it compiles. Does
something special need to be done with character strings and pointers?

Thanks.


 
Reply With Quote
 
 
 
 
Ian Collins
Guest
Posts: n/a
 
      04-19-2006
gk245 wrote:
> I have something like this:
>
> #include <stdio.h>
>
> main ()
> {
> struct line
> {
> char write[20];
> char read[20];
>
> struct line *next;
> };
>
> struct line n1;
>
> n1.write= "concepts";
>
> }
>
> However, if i try to compile it, i get a compiler error saying that
> "incompatible types in assignment". Whats strange is that if i set
> write as an integer, i don't get such a error and it compiles. Does
> something special need to be done with character strings and pointers?
>

They are different. You have declared write as an array of 20 char and
you are attempting to assign a pointer to const char to it.

I think you are confused regarding accessing an array through a pointer
and assigning to an array. You have to copy the string literal into the
array.

--
Ian Collins.
 
Reply With Quote
 
 
 
 
Giorgos Keramidas
Guest
Posts: n/a
 
      04-19-2006
On Wed, 19 Apr 2006 19:01:27 -0400, gk245 <(E-Mail Removed)> wrote:
> I have something like this:
>
> #include <stdio.h>
>
> main ()
> {
> struct line
> {
> char write[20];
> char read[20];
>
> struct line *next;
> };
>
> struct line n1;
>
> n1.write= "concepts";
>
> }


This is probably the usual confusion around arrays and pointers. You
cannot treat an array "as if" it was a pointer in the left part of an
assignment. Array names "decay" to pointers (to their first element)
when they are in the right part of an assignment, but the reverse is not
true.

You will have to use strncpy() or strlcpy() to copy the data from your
constant string into the array member of the structure, i.e. with:

size_t len;

len = sizeof(n1.write);
strncpy(n1.write, "concepts", len - 1);
n1.write[len - 1] = '\0';

or

strlcpy(n1.write, "concepts", sizeof(n1.write));

 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      04-19-2006
gk245 <(E-Mail Removed)> writes:
> I have something like this:
>
> #include <stdio.h>
>
> main ()
> {
> struct line
> {
> char write[20];
> char read[20];
>
> struct line *next;
> };
>
> struct line n1;
>
> n1.write= "concepts";
>
> }
>
> However, if i try to compile it, i get a compiler error saying that
> "incompatible types in assignment". Whats strange is that if i set
> write as an integer, i don't get such a error and it compiles. Does
> something special need to be done with character strings and pointers?


<http://www.c-faq.com/>. Read all of section 6, "Arrays and Pointers".

--
Keith Thompson (The_Other_Keith) http://www.velocityreviews.com/forums/(E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
 
Reply With Quote
 
gk245
Guest
Posts: n/a
 
      04-20-2006
Keith Thompson formulated on Wednesday :
> gk245 <(E-Mail Removed)> writes:
>> I have something like this:
>>
>> #include <stdio.h>
>>
>> main ()
>> {
>> struct line
>> {
>> char write[20];
>> char read[20];
>>
>> struct line *next;
>> };
>>
>> struct line n1;
>>
>> n1.write= "concepts";
>>
>> }
>>
>> However, if i try to compile it, i get a compiler error saying that
>> "incompatible types in assignment". Whats strange is that if i set
>> write as an integer, i don't get such a error and it compiles. Does
>> something special need to be done with character strings and pointers?

>
> <http://www.c-faq.com/>. Read all of section 6, "Arrays and Pointers".


Thx for the link and the help guys. ^^


 
Reply With Quote
 
Chad
Guest
Posts: n/a
 
      04-20-2006
> This is probably the usual confusion around arrays and pointers. You
> cannot treat an array "as if" it was a pointer in the left part of an
> assignment. Array names "decay" to pointers (to their first element)
> when they are in the right part of an assignment, but the reverse is not
> true.
>


Okay, I'm confused. Then how come something like this works.

include <stdio.h>
#define BUF 6

int main(void) {
char arr[BUF] = "la";

printf("the value is: %s\n", arr);

return 0;
}


Chad

$gcc -Wall arr.c -o arr
$./arr
the value is: la


But something like this:

include <stdio.h>
#define BUF 6

int main(void) {
int arr[BUF] = "la";

printf("the value is: %s\n", arr);

return 0;
}


produces
$gcc -Wall arr.c -o arr
arr.c: In function `main':
arr.c:5: error: invalid initializer
arr.c:7: warning: char format, different type arg (arg 2)

 
Reply With Quote
 
Chad
Guest
Posts: n/a
 
      04-20-2006
> This is probably the usual confusion around arrays and pointers. You
> cannot treat an array "as if" it was a pointer in the left part of an
> assignment. Array names "decay" to pointers (to their first element)
> when they are in the right part of an assignment, but the reverse is not
> true.
>


Okay, I'm confused. Then how come something like this works.


#include <stdio.h>
#define BUF 6

int main(void) {
char arr[BUF] = "la";

printf("the value is: %s\n", arr);

return 0;

}


$gcc -Wall arr.c -o arr
$./arr
the value is: la

But something like this:

#include <stdio.h>
#define BUF 6

int main(void) {
int arr[BUF] = "la";

printf("the value is: %s\n", arr);

return 0;

}

produces
$gcc -Wall arr.c -o arr
arr.c: In function `main':
arr.c:5: error: invalid initializer
arr.c:7: warning: char format, different type arg (arg 2)

Chad

 
Reply With Quote
 
sweety.rathore@gmail.com
Guest
Posts: n/a
 
      04-20-2006
Integer arrays cannot be assigned strings, you can assign one character
at a time to the array--

like arr[0]='l';
arr[1]='a';

Because when characters are assigned to integers, theri ascii value
gets transferred, but the ascii value of strings cannot be calculated.

 
Reply With Quote
 
Old Wolf
Guest
Posts: n/a
 
      04-20-2006
Chad wrote:
>> Array names "decay" to pointers (to their first element) when they
>> are in the right part of an assignment, but the reverse is not true.

>
> Okay, I'm confused. Then how come something like this works.
>
> char arr[BUF] = "la";


This is not an assignment; it is an initialization. Some
programming languages use a different symbol for initialization
than they do for assignment. But C uses the equals sign for both.

In the initialization case, it means that "la" is an initializer for
arr. The C standard defines specifically that arrays of char can
be initialized from string literals.

> int arr[BUF] = "la";


Other arrays can only be initialized by an initializer list, eg:
int arr[BUF] = { 1, 2 };

The case of initializing from a string literal is only for arrays of
char.

 
Reply With Quote
 
Peter Shaggy Haywood
Guest
Posts: n/a
 
      04-22-2006
Groovy hepcat Ian Collins was jivin' on Thu, 20 Apr 2006 11:06:02
+1200 in comp.lang.c.
Re: Pointer incompatible type assignment to character.'s a cool scene!
Dig it!

>gk245 wrote:
>> struct line
>> {
>> char write[20];
>> char read[20];
>> struct line *next;
>> };
>>
>> struct line n1;
>>
>> n1.write= "concepts";


[Snipage.]

>They are different. You have declared write as an array of 20 char and
>you are attempting to assign a pointer to const char to it.


No, he's trying to assign a pointer to char to it. There is no const
qualification on a string literal. It's not modifiable, but not const
qualified either.

--

Dig the even newer still, yet more improved, sig!

http://alphalink.com.au/~phaywood/
"Ain't I'm a dog?" - Ronny Self, Ain't I'm a Dog, written by G. Sherry & W. Walker.
I know it's not "technically correct" English; but since when was rock & roll "technically correct"?
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
incompatible pointer assignment Prathamesh Kulkarni C Programming 7 12-10-2012 03:38 PM
assignment from incompatible pointer type Bart Vandewoestyne C Programming 2 04-27-2010 02:00 PM
assignment from incompatible pointer type Olaf \El Blanco\ C Programming 1 06-10-2006 04:48 PM
initialization from incompatible pointer type Brian Stubblefield C Programming 3 05-27-2004 01:31 PM
incompatible pointer assignment ? zmbdcqnrdfetnws C Programming 8 12-06-2003 04:52 AM



Advertisments