Why is the following ok?
char *a;
char b[]="asdf";
a=b;
But the following is not?
char a[10];
char b[]="asdf";
a=b;
The above gives error: incompatible types in assignment.
Why is the following ok?
char *a;
char b[]="asdf";
a=b;
But the following is not?
char a[10];
char b[]="asdf";
a=b;
The above gives error: incompatible types in assignment.
Both are not ok.
Maybe you were attempting ,
char *a;
char b[]="asdf";
a=b;
char a;
char b[]="asdf";
a=b;
Here you are assigning address of array b to a which is of char type. Size of address will be 4 bytes (8 bytes in 64 bit m/c) which you are assigning to 1 byte char variable a so the values will get truncated. This is legal but its of no use.
I think you are actually trying to assign first character of b array to a. In that case do a = b[0].
The value of an array evaluates to the address of the first element within the array. So basically, it's a constant value. That's why when you try to do a=b in the second example, you're trying to do something similar to 2=7, only you have two addresses instead of 2 integers.
Now it makes sense that the first example would work, since assigning an address to a pointer is a valid operation.
You need to include the below header for string library.
#include <string.h>
Using strcpy(strX, strY); will copy string Y into string X, given there is enough space.
strcpy() does not check that there is enough space available, in fact it has no way to do so. You can use strncpy() to control that you don't buffer overflow, but you may have to insert the final null byte manually.