0

hey guys, so i get the "c incompatible types in assignment" error in the malloc line.
would someone please explain where i went wrong?

Thank you in advance.

#include <stdio.h>
#include <stdlib.h>

struct the_struct
{
 char FirstName[20];
 char LastName[32];
 int  Score[20];
};
int main ()
 {
int i,n;
struct the_struct *ptr[100];
printf("how many students?");
scanf("%d",&n);
ptr=(int*)malloc(n*sizeof(int));
for (i=0;i<=n;i++);
    printf("Enter First Name \n");
    scanf("%s",ptr[i]->FirstName);
    printf("Enter Last Name \n");
    scanf("%s",ptr[i]->LastName);
    printf("Enter Score? \n");
    scanf("%s",ptr[i]->Score);
    printf("%s %s %s\n",ptr[i]->FirstName,ptr[i]->LastName,ptr[i]->Score);
 }
3
Contributors
10
Replies
38
Views
2 Years
Discussion Span
Last Post by DkgMarine
0

First of all ptr is an array (of pointers), not a pointer. So you can't assign to it.

Second of all, even if it were a pointer, it wouldn't be an int pointer, so casting the result of malloc to int* is wrong because that's the wrong type (also: don't cast the result of malloc). Similarly it does not make sense to use sizeof(int) as the basis for your size calculation as, again, it's not an int pointer.

0

Yes I know its an array of pointers, but I didn't know how to assign like 100 user inputs to diffrent pointers.
So what type should it be so it could hold char and int? Or should I do two malloc statements one to store int and one to store char?

0

As sepp2k alreay said, you can malloc ptr because it's already an array of 100 pinters. Instead you will have to malloc each individual pointer

for (i=0;i<=n;i++)
{
   ptr[i] = malloc(sizeof(the_struct));
   ...
}

what type should it be so it could hold char and int?

It holds the_struct which is neither char nor int. the_struct is a user-defined data type.

Edited by Ancient Dragon

1

You are making the wrong typecast

One doesn't need to (and arguably shouldn't) typecast the result of malloc at all. And much more importantly, ptr is still not a pointer, so that line won't work no matter what he casts the result of malloc to.

0

Yes, I realized that afer re-reading your original post. Re-read my post and you will see that I corrected it. And I agree with you about typecasting malloc in C programs.

0

So this is what i change but i still get errors.
1)the_struct is undeclared
2)each undeclared identifier is reported only once
3)for each function it appers in.

#include <stdio.h>
#include <stdlib.h>

struct the_struct
{
 char FirstName[20];
 char LastName[32];
 int  Score[20];
};
int main ()
 {
int i,n;
struct the_struct *ptr[100];
printf("how many students?");
scanf("%d",&n);
for (i=0;i<=n;i++);
{
    ptr[i] = malloc(sizeof(the_struct));
    printf("Enter First Name \n");
    scanf("%s",ptr[i]->FirstName);
    printf("Enter Last Name \n");
    scanf("%s",ptr[i]->LastName);
    printf("Enter Score? \n");
    scanf("%s",ptr[i]->Score);
    printf("%s %s %s\n",ptr[i]->FirstName,ptr[i]->LastName,ptr[i]->Score);
 }
 }
0

ptr[i] = malloc(sizeof(the_struct));

should be this:
ptr[i] = malloc(sizeof(struct the_struct));

Occasionally I confuse C and C++. In C++ the keyword struct is not required. Sorry for the confusion.

0

and shouldn't i write;

ptr[i] = malloc(sizeof(n*(struct the_struct)));

so it could store number of elements the user input?

0

So finally made it work thanks to you guys!
and for future reference this is the final code that worked.

#include <stdio.h>
#include <stdlib.h>

struct the_struct
{
 char FirstName[20];
 char LastName[32];
 int  Score[20];
};
int main ()
 {
int i,n;
struct the_struct *ptr[100];
printf("how many students?\n");
scanf("%d",&n);

for (i = 0; i < n; ++i)
{

   ptr[i] = malloc(sizeof(struct the_struct));
   printf("Enter First Name \n");
   scanf("%s",ptr[i]->FirstName);
   printf("Enter Last Name \n");
   scanf("%s",ptr[i]->LastName);
   printf("Enter Score? \n");
   scanf("%s",ptr[i]->Score);
   printf("%s %s %s\n",ptr[i]->FirstName,ptr[i]->LastName,ptr[i]->Score);
    }
 }
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.