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]
.
When you say
char a[10];
'a' is actually
char * const a = malloc(sizeof(char) * 10); // remember to free it, can use alloca() instead
and 'a' is initialized to point to 10 * sizeof(char) of allocated memory.
So
a[1] = 't';
*(a + 1) = 't';
are allowed. But
char *b = "some string";
a = b;
is not allowed.
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.
请使用c ++的strcpy_s函数,它的语法为&dest,* source可能会有所帮助。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.