2

I am new to C. I'm getting the following error when compiling:

error: variably modified 'header' at file scope
error: variably modified 'sequence' at file scope

Code:

struct list{
  char header[list_header_size];
  char sequence[list_sequence_size];
  struct list *next;
};

I thought the error meant that the compiler needed to know what these variables were from the beginning. So, I moved main(), which is where the struct is called, to the end of the program. I also tried declaring the variables at beginning of the program, but I'm not sure if I did that correctly. I tried char header; and char header[];.

2

1 Answer 1

4

You are right that the compiler needs to know the types of the members of the struct. One reason why it needs to know the types is so that it can calculate sizes. In your case, however, it can't know the sizes because in your struct you have defined two arrays that are not of a constant size. Therefore, the compiler doesn't know the total size of the struct and this defeats the purpose of knowing the types.

The closest to what you want is to replace the two char arrays with two char pointers and allocate the memory they will point to dynamically.

Sign up to request clarification or add additional context in comments.

7 Comments

"Calculating sizes" is missing the interesting point: In C, array types are types, and the size of part of the type.
Alright, I did this. Now I get a weird error: expected ':', ',', ';', '}' or 'attribute' before '=' token ` int list_header_size = 200; int list_sequence_size = 2000; struct list{ char header = (char) malloc(sizeof(list_header_size)); char sequence = (char) malloc(sizeof(list_sequence_size)); struct list *next; }; `
@user1472747 Please post your modified code so that we can see what's wrong.
I'm trying... but I can't figure out how to format code in the comment. I'll post it in the main post.
oh, wow. You're not supposed to set fields in the struct, are you... I'm an idiot >.<
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.