By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,820 Members | 1,189 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,820 IT Pros & Developers. It's quick & easy.

help generating an array of array with malloc or calloc

P: n/a
Hi ! I would like to generate an array of type char[n][5];

I just dont really figure out how I could do it with malloc or calloc.. I
mean.. I know how to allocate a simple array with both of them; but when it
comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char**
array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
anyone have an idea ?
Nov 13 '05 #1
Share this Question
Share on Google+
7 Replies


P: n/a
Eric Boutin wrote:

Hi ! I would like to generate an array of type char[n][5];

I just dont really figure out how I could do it with malloc or calloc.. I
mean.. I know how to allocate a simple array with both of them; but when it
comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char**
array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
anyone have an idea ?


Output from new.c:

array[0][0] is 0
array[0][1] is 1
array[0][2] is 2
array[0][3] is 3
array[0][4] is 4
array[1][0] is 10
array[1][1] is 11
array[1][2] is 12
array[1][3] is 13
array[1][4] is 14
array[2][0] is 20
array[2][1] is 21
array[2][2] is 22
array[2][3] is 23
array[2][4] is 24

/* BEGIN new.c */

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

#define N 3

int main(void)
{
size_t n, a, b;
char (*array)[5];

n = N;
array = malloc(n * sizeof *array);
if (!array) {
fputs("I'm tired\n", stderr);
exit(EXIT_FAILURE);
}
puts("Output from new.c:\n");
for (a = 0; a != n; ++a) {
for (b = 0; b != 5; ++b)
array[a][b] = (char)(10 * a + b);
}
for (a = 0; a != n; ++a) {
for (b = 0; b != 5; ++b) {
printf("array[%u][%u] is %u\n",
(unsigned)a,
(unsigned)b,
(unsigned)array[a][b]);
}
}
return 0;
}

/* END new.c */
Nov 13 '05 #2

P: n/a
Eric Boutin wrote:

Hi ! I would like to generate an array of type char[n][5];

I just dont really figure out how I could do it with malloc or calloc.. I
mean.. I know how to allocate a simple array with both of them; but when it
comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char**
array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
anyone have an idea ?


Read the C FAQ, Question 6.16
http://www.eskimo.com/~scs/C-faq/q6.16.html
Nov 13 '05 #3

P: n/a
Eric Boutin wrote:

Hi ! I would like to generate an array of type char[n][5];

I just dont really figure out how I could do it with malloc or calloc.. I
mean.. I know how to allocate a simple array with both of them; but when it
comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char**
array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
anyone have an idea ?


You clearly need a better C book. K&R2 comes to mind. Chapter 5
pertains. There is also Steve Summit's C FAQ. Section 6 pertains. Read
more.
--
Joe Wright http://www.jw-wright.com
"Everything should be made as simple as possible, but not simpler."
--- Albert Einstein ---
Nov 13 '05 #4

P: n/a
sorry I didn't read this point in the FAQ..

sorry

"Nejat AYDIN" <ne********@superonline.com> a écrit dans le message de
news:3F***************@superonline.com...
Eric Boutin wrote:

Hi ! I would like to generate an array of type char[n][5];

I just dont really figure out how I could do it with malloc or calloc.. I mean.. I know how to allocate a simple array with both of them; but when it comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char** array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
anyone have an idea ?


Read the C FAQ, Question 6.16
http://www.eskimo.com/~scs/C-faq/q6.16.html

Nov 13 '05 #5

P: n/a
Thanks !

"pete" <pf*****@mindspring.com> a écrit dans le message de
news:3F**********@mindspring.com...
Eric Boutin wrote:

Hi ! I would like to generate an array of type char[n][5];

I just dont really figure out how I could do it with malloc or calloc.. I mean.. I know how to allocate a simple array with both of them; but when it comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char** array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
anyone have an idea ?


Output from new.c:

array[0][0] is 0
array[0][1] is 1
array[0][2] is 2
array[0][3] is 3
array[0][4] is 4
array[1][0] is 10
array[1][1] is 11
array[1][2] is 12
array[1][3] is 13
array[1][4] is 14
array[2][0] is 20
array[2][1] is 21
array[2][2] is 22
array[2][3] is 23
array[2][4] is 24

/* BEGIN new.c */

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

#define N 3

int main(void)
{
size_t n, a, b;
char (*array)[5];

n = N;
array = malloc(n * sizeof *array);
if (!array) {
fputs("I'm tired\n", stderr);
exit(EXIT_FAILURE);
}
puts("Output from new.c:\n");
for (a = 0; a != n; ++a) {
for (b = 0; b != 5; ++b)
array[a][b] = (char)(10 * a + b);
}
for (a = 0; a != n; ++a) {
for (b = 0; b != 5; ++b) {
printf("array[%u][%u] is %u\n",
(unsigned)a,
(unsigned)b,
(unsigned)array[a][b]);
}
}
return 0;
}

/* END new.c */

Nov 13 '05 #6

P: n/a
Thanks for book suggestion

"Joe Wright" <jo********@earthlink.net> a écrit dans le message de
news:3F**********@earthlink.net...
Eric Boutin wrote:

Hi ! I would like to generate an array of type char[n][5];

I just dont really figure out how I could do it with malloc or calloc.. I mean.. I know how to allocate a simple array with both of them; but when it comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char** array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
anyone have an idea ?


You clearly need a better C book. K&R2 comes to mind. Chapter 5
pertains. There is also Steve Summit's C FAQ. Section 6 pertains. Read
more.
--
Joe Wright http://www.jw-wright.com
"Everything should be made as simple as possible, but not simpler."
--- Albert Einstein ---

Nov 13 '05 #7

P: n/a
Eric Boutin wrote:

Thanks !
You're welcome.
"pete" <pf*****@mindspring.com> a écrit dans le message de
news:3F**********@mindspring.com...
Eric Boutin wrote:

Hi ! I would like to generate an array of type char[n][5];

I just dont really figure out how
I could do it with malloc or calloc..
array = malloc(n * sizeof *array);
The way that this particular program was written,
it wasn't necessary to free(array),
but I believe that it's good to be in the habit of freeing
whatever is allocated, and I forgot to do that.
}


free(array);
return 0;
}

/* END new.c */

--
pete
Nov 13 '05 #8

This discussion thread is closed

Replies have been disabled for this discussion.