call by reference pointers to array of structures

Sanjanna's Avatar, Join Date: Sep 2010
Newbie Member
Hi

I have a prob in my code which am trying to debug from past 2 days. Can i get help on this.

i have a structure declared in header file
Code:
typedef struct
{
  char a;
  int b;
  } struct2;

This is declared in my current pgm where   struct2 *test is similar to struct2
typedef struct
{
  char a;
  int b;
  int c;
  struct2 *test;
  } struct1;

int copy(struct1* stats);

int main (int argc, char *argv[])
{
        struct1 stats;
        copy(&stats);
        return 0;
}


int copy(struct1* stats)
{
	struct2* str= NULL;
	int num = 0;

	printf("In copy funct \n");
	if (read(str, &num) != 0)
	{
		printf("Error reading stats.\n");
		return -1;
	}
	printf("Address of str  at copy  funt %u \n", str); 
	printf("a  %s \n",&str[0]->a);
	printf("b  %d \n",&str[0]->b);

	stats->c = num;
	stats->test = str;

	return 0;
}
prob is am not able to access the elements of structure str (&str[0]->a,&str[0]->b); Also the address of str in the copy function and hte read function are not the same. I can see the values in the read function. I dnt know if i am accessing the values in the right way in the copy funciton. Can anyone plz help me with this...


Thanks,
Sanjana

Last edited by shabbir; 20Sep2010 at 22:48.. Reason: Code blocks
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
Why are you using array semantics to access str? Just use str->a, not &str[0]->a.

str->a is a char, not a string. Display it with %c not %s. %s displays a NULL-terminated array of char and will not display a single char correctly.

str doesn't exist after copy() has terminated. If you need to use it after copy() has terminated, either create it in the heap (use malloc and free) or make it static.

read doesn't modify str, it can't, because you don't pass the address of str in. If it writes to str, this is undefined behaviour because str is NULL. Maybe what you should do instead is
Code:
struct2 str;
...
if (read(&str, &num)...