开发者

defining a string value for structure variable

开发者 https://www.devze.com 2023-02-04 19:01 出处:网络
I was just going through certain inte开发者_JAVA百科rview questions. Got this structure related issue, I m not understanding what is happening wit the output, Please if some could explain the reason.

I was just going through certain inte开发者_JAVA百科rview questions. Got this structure related issue, I m not understanding what is happening wit the output, Please if some could explain the reason.

When is use a character pointer in the structure like

#include <stdio.h>

struct name {
    char *array;
}variable;

int main( int argc, char * argv[] ){

    variable.array="hello";
    printf( "%s\n", variable.array );
}

The output is hello printed, but when change the structure variable to

struct name {
    char array[10];
}variable;

The compiler throws an error "incompatible types in assignment" at

variable.array="hello";

I am really confused as to where i am missing the point. Why does it show the error like assignment problem?? Please correct me Thank you


You can only initialize array like that at the time of declaration only, else you need to use

strcpy(variable.array,"hello");

you can't even do like that with a simple char array

char a[10];

a="hello";

the complier will tell :

incompatible types when assigning to type ‘char[10]’ from type ‘char *’

because "hello" is a string literal that is being held by a pointer which can't be assigned like this to an array.


In C the term "hello" means "a pointer to a string that has the chars 'hello\0' in it". So when you assign array="hello" in the first case you are assigning the pointer to the string into a pointer variable. Which is right.

In the second case you try to assign a pointer to an array which is wrong! you can't assign value to an array.


It raises an error because an array of char and a pointer to char are different things.

An array is not a pointer. A pointer is not an array. Sometimes a pointer might point to an array. But even when a pointer points to an array, it's not an array.

Your compiler gives an address to variable.array at compile time. It also gives an address to the string literal "hello". They're not the same address. The string literal and the array (or "the buffer") are in different places; logically, the string has to be copied into the buffer.

#include <stdio.h>
#include <string.h>

struct name {
    char array[10];
}variable;

int main( void ){

    strcpy(variable.array, "hello");
    printf( "%s\n", variable.array );
    return 0;

}

You might find the C FAQ useful.


The first thing is array is a constant pointer to the first element in the
array,we can not change its address location once we declared..like

int a[3]; is equivalent to int *const a;

so we cant change the array address location

int a[3]={1,2,3};

a++;//its an error

int b[3];

b=a;//its also an error

but int *c;

c=a;//Not an error because c is a pointer to integer not constant pointer to integer

similar to 
char str[10]="hello";

if i change like this

str="world";//its also an error

Pointers and arrays are always not equal, in some cases only like dereferencing 

   char a[10]="hello";
for(i=0;a[i]!='\0';i++)
   printf("%c",a[i]);

for(i=0;a[i]!='\0';i++)
   printf("%c",*(a+i));
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号