Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   length of 2D Array >> char **myString= (char **) malloc (sizeof (char *)); (http://www.velocityreviews.com/forums/t456592-length-of-2d-array-char-mystring-char-malloc-sizeof-char.html)

davidb 09-01-2006 03:22 PM

length of 2D Array >> char **myString= (char **) malloc (sizeof (char *));
 
Hi,
does someone know how to get the length of a 2 dimensional string
array:
here what i need:

----------------------------------------------------------------

char **getList(void){

char **myString= (char **) malloc (sizeof (char *));

for(int i=0;i<10;i++){
myString= (char **) realloc (myString, (i+1) * sizeof (char *));
myString[i] = (char *) malloc (255 * sizeof(char));
strcpy (myString[i],"List Item");
}
return myString;
}

void something(void){
char **dataList = getList();

int length = ????? // IDEA ?

for(int i=0;i<length;i++){
printf(dataList[i]);
}
}

----------------------------------------------------------------

i've done several experiments with sizeof like
int length = (sizeof(array)/sizeof(array[0])
but most time i always get length = 1.

sorry, thats a bit simple, but i am cosseted java progger ;)
you know > "my String".length.
So, if you know, please tell me.

best Regards,
David


Frederick Gotham 09-01-2006 03:39 PM

Re: length of 2D Array >> char **myString= (char **) malloc (sizeof (char *));
 
davidb posted:

> Hi,
> does someone know how to get the length of a 2 dimensional string
> array:



It's not possible using a pointer alone.

If you're going to be using a pointer (e.g. with dynamic allocation), then
you'll have to keep track of the length yourself -- Standard C++ doesn't
provide such a facility. Even something as simple as:

#include <cstddef>

template<class T>
struct ArrPtr {
T *p;
size_t len;
};

--

Frederick Gotham

davidb 09-01-2006 03:44 PM

Re: length of 2D Array >> char **myString= (char **) malloc (sizeof (char *));
 
Hi,
yes, thats great, i dont thought about returning all that values in one
struct.
Sometimes it is that easy ;)

Thank you,
David

Frederick Gotham schrieb:

> davidb posted:
>
> > Hi,
> > does someone know how to get the length of a 2 dimensional string
> > array:

>
>
> It's not possible using a pointer alone.
>
> If you're going to be using a pointer (e.g. with dynamic allocation), then
> you'll have to keep track of the length yourself -- Standard C++ doesn't
> provide such a facility. Even something as simple as:
>
> #include <cstddef>
>
> template<class T>
> struct ArrPtr {
> T *p;
> size_t len;
> };
>
> --
>
> Frederick Gotham



Frederick Gotham 09-01-2006 04:14 PM

Re: length of 2D Array >> char **myString= (char **) malloc (sizeof (char *));
 
Frederick Gotham posted:

> size_t len;



std::size_t len;

--

Frederick Gotham

Thomas J. Gritzan 09-01-2006 04:28 PM

Re: length of 2D Array >> char **myString= (char **) malloc (sizeof(char *));
 
davidb schrieb:
> Hi,
> does someone know how to get the length of a 2 dimensional string
> array:


It is a one dimensional C-style-string array. Or a 2 dimensional char array.

> ----------------------------------------------------------------
>
> char **getList(void){
>
> char **myString= (char **) malloc (sizeof (char *));
>
> for(int i=0;i<10;i++){
> myString= (char **) realloc (myString, (i+1) * sizeof (char *));
> myString[i] = (char *) malloc (255 * sizeof(char));
> strcpy (myString[i],"List Item");
> }
> return myString;
> }

[...]
> ----------------------------------------------------------------
>
> i've done several experiments with sizeof like
> int length = (sizeof(array)/sizeof(array[0])
> but most time i always get length = 1.
>
> sorry, thats a bit simple, but i am cosseted java progger ;)
> you know > "my String".length.
> So, if you know, please tell me.


Why don't you use standard C++ classes?

#include <iostream>
#include <string>
#include <vector>

int main()
{
std::vector<std::string> myList;
list.push_back("Item 1");
list.push_back("Item 2");

int length = myList.size();

for (int i = 0; i < length; i++)
std::cout << myList[i] << std::endl;

return 0;
}

--
Thomas

Jerry Coffin 09-01-2006 05:07 PM

Re: length of 2D Array >> char **myString= (char **) malloc (sizeof (char *));
 
In article <ed9n2r$cfa$1@newsreader2.netcologne.de>,
Phygon_ANTISPAM@gmx.de says...

[ ... ]

> int length = myList.size();
>
> for (int i = 0; i < length; i++)
> std::cout << myList[i] << std::endl;


std::copy(myList.begin(), myList.end(),
std::ostream_iterator(std::cout, "\n"));

--
Later,
Jerry.

The universe is a figment of its own imagination.

Default User 09-01-2006 05:57 PM

Re: length of 2D Array >> char **myString= (char **) malloc (sizeof (char *));
 
davidb wrote:

> Hi,



Please don't top-post. Your replies belong following or interspersed
with properly trimmed quotes. See the majority of other posts in the
newsgroup, or the group FAQ list:
<http://www.parashift.com/c++-faq-lite/how-to-post.html>




Brian


All times are GMT. The time now is 10:04 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.