Solved

dynamic array of static sized strings

Posted on 2002-05-31
7
204 Views
Last Modified: 2010-04-15
I want to create a dynamic array of strings, each string of size 100.  I know I can use char **ppMyArray, allocate the number I want, and then allocate each pointer to size 100.  My question: Is there a way to create the array without the need to loop through and allocate each pointer to size 100?
0
Comment
Question by:marvinm
  • 3
  • 3
7 Comments
 
LVL 16

Accepted Solution

by:
imladris earned 200 total points
ID: 7047118
Sure. If you declare the array:

char (* dynarray)[100];

Then you can allocate as many elements as you want with:

dynarray=calloc(numberofelements,100*sizeof(char));
0
 
LVL 1

Author Comment

by:marvinm
ID: 7047144
how can I do the allocation to avoid
warning: assignment from incompatible pointer type?
Thanks!
0
 
LVL 6

Expert Comment

by:Triskelion
ID: 7047153
Can you put the string in a structure and dynamically create them?

typedef struct tagSTRING_THING
{
     char     strData[100];
} STRING_THING;
0
ScreenConnect 6.0 Free Trial

Want empowering updates? You're in the right place! Discover new features in ScreenConnect 6.0, based on partner feedback, to keep you business operating smoothly and optimally (the way it should be). Explore all of the extras and enhancements for yourself!

 
LVL 1

Author Comment

by:marvinm
ID: 7047154
a = (char (*)[100])malloc() seems to work
If I declare a char **, then I need to malloc num_elements * sizeof (char *), and then for each one num_elements*100
do I need to allocate num_elements * ((sizeof(char *)+100)?
Thank You
(this is the last part of my question)
0
 
LVL 16

Expert Comment

by:imladris
ID: 7047487
Almost. The declaration:

char (*a)[100];

is a pointer to an array of 100 characters. So what you are allocating is multiples of arrays of 100 characters. So the malloc would be:

a=(char (*)[100])malloc(numelements*sizeof(char)*100);

For calloc it would be:

a=(char (*)[100])calloc(numelements,sizeof(char)*100);



This is, for completeness, in contrast to:

char **a;

With this declaration a is a pointer to a pointer. Semantically you wind up treating them the same. But the memory layout is different. In the first case you have a single pointer to a block of memory that represents some number of 100 byte arrays. In the second case you have a pointer to an array (of some size) of pointers. Each of the elements in the "second" array then points to individual arrays of 100 bytes. So in the first case a location is found with a pointer dereference, followed by a 2 calculations (find the block, then calculate where the desired array is, then calculate the position of the element). In the second case there are two dereferences followed and two calculation (find the second array, calculate which pointer you want, dereference that, then calculate where the element is).
0
 
LVL 16

Expert Comment

by:imladris
ID: 7047494
P.S. note that the difference in the memory layout at the root of why they have to be malloced differently. In the first case there is a single block of memory, so a single malloc or calloc can fill the requirements.

But in the second case there are separate memory blocks for each array, plus one for the pointer array. Therefore you have to do all the mallocs or callocs separately.
0
 
LVL 1

Author Comment

by:marvinm
ID: 7047511
Great!
Thank You
0

Featured Post

Does Powershell have you tied up in knots?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
The goal of this video is to provide viewers with basic examples to understand how to use strings and some functions related to them in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.

840 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question