2d array, using calloc in C

*爱你&永不变心* 提交于 2019-12-02 17:59:45

问题


I'm trying to create a 2D array of chars to storage lines of chars. For Example:

lines[0]="Hello";
lines[1]="Your Back";
lines[2]="Bye";

Since lines has to be dynamically cause i don't know how many lines i need at first. Here is the code i have:

int i;
char **lines= (char**) calloc(size, sizeof(char*));

for ( i = 0; i < size; i++ ){
lines[i] = (char*) calloc(200, sizeof(char));
}

for ( i = 0; i < size; i++ ){
free(lines[i]);
}

free(lines);

I know that each line can't go over 200 chars. I keep getting errors like "error C2059: syntax error : 'for'" and such. Any ideas of what i did wrong?


回答1:


No the code is not in a function.

You can't just put arbitrary statements outside of functions in C and C++. What you can do though is use a function to initialize the variable:

char** init_lines() {
    char** ln = /* ... */;
    // your allocations etc. here
    return ln;
}

char** lines = init_lines();



回答2:


You tagged the question with C++ -- why not use a std::vector<std::vector<char> > for this?

Looking at the compiler error, it looks like you're missing a semicolon before one of your for loops -- the code you posted seems to work perfectly fine here.




回答3:


For a start, it's a waste of time doing that first calloc since you immediately initialise them with the first for loop.

Having said that, there's nothing at all wrong with the code you've shown.

Therefore, either your error lies elsewhere or that's not the code you've posted. I suggest you post the exact error message along with a cut-and-pasted copy of the offending line and ten lines either side of it for context. That will make our lives a lot easier in helping you out.


The errors:

syntax error : 'for' syntax error : missing ')' before ';'
syntax error : missing ';' before '<' missing type specifier - int assumed

as shown in one of your comments is usually caused by unbalanced parentheses. Check all your ( and ) characters to ensure they're equal in number, and in the right place. It's probably because you're missing a ) in the statement before the for but that's just an educated guess since the code you posted does not have that problem.




回答4:


Here i'm opinion is different. May be useful. char pointer or char double is implicitly define during compilation. Hence it is not need to define explicitly and by doing so it show syntax error. Try char pointer without initializing by calloc and if you don't want garbage value initialize with NULL. It act like using calloc, you find nothing different.



来源:https://stackoverflow.com/questions/2664624/2d-array-using-calloc-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!