Hi,
This may look as a smiple task to most of you, but to me (a beginner
with C), it drives me crazy.
All I want is that one function passes a two dimensional array of
strings to another function.
example:
NOTE: the strings can be of different length and the array will be
initialized many times to differnt values.
void fun_1()
{
char **Arr[3][2]= {'\0'}; //I want to define a 3x2 array of strings
of
//different length (max 32 ch)
//Arr initialization
// Arr ["ONE", "1"]
// ["Two", "2"]
// ["THREE", "3"]
fun2(Arr);
}
void fun_2(char **rcvArr)
{
}
CAn anybody help me with how to define it, how to initialize it and
hwo to send and receive it as a parameter.
I suspect that I must define some buffer length. The question is
should I select fixed length (e.g. 32 ch per string) or a veriable
length. In the other option I would probably need to use malloc in
order to allocate memory...
I would be happy to be advised of the best way to do it. Also, when I
initialize the array, I preffer that it will take as little text space
as possible (for example, the best will be to define it all in one
line!).
Thanks for helping
Rafi 9 2585 ra*******@telrad.co.il (Rafi Kfir) writes: Hi,
This may look as a smiple task to most of you, but to me (a beginner with C), it drives me crazy.
All I want is that one function passes a two dimensional array of strings to another function. ...
I would be happy to be advised of the best way to do it.
Look up <vector> and <string> in a C++ book - or online.
Rafi Kfir wrote: This may look as a smiple task to most of you, but to me (a beginner with C), it drives me crazy.
If you need help with C, you should consider comp.lang.c as your NG of
choice.
All I want is that one function passes a two dimensional array of strings to another function.
example: NOTE: the strings can be of different length and the array will be initialized many times to differnt values.
void fun_1() { char **Arr[3][2]= {'\0'}; //I want to define a 3x2 array of strings of //different length (max 32 ch)
In C++ one should always consider standard containers for that:
vector<vector<string> > Arr;
In C you probably will want to declare an array of pointers to char:
char *Arr[3][2] = { 0 };
and then somehow allocate the memory. Although, I'd susupect that to
have an array of 33-char arrays would be easier (since you limited your
strings to 32 bytes):
char Arr[3][2][33];
//Arr initialization // Arr ["ONE", "1"] // ["Two", "2"] // ["THREE", "3"]
If you declare your array as 3-dimensional, you still should be able to
initialise it as
char Arr[3][2][33] =
{ { "ONE", "1" }, { "Two", "2" }, { "Three", "3" } }; fun2(Arr); }
void fun_2(char **rcvArr)
Just repeat the declaration of the Arr in your function declaration (but
pick the right name for it first, 'fun2' or 'fun_2'):
void funX(char Arr[3][2][33])
{
}
CAn anybody help me with how to define it, how to initialize it and hwo to send and receive it as a parameter.
How about a book on C? Do you have any?
I suspect that I must define some buffer length. The question is should I select fixed length (e.g. 32 ch per string) or a veriable length. In the other option I would probably need to use malloc in order to allocate memory...
Right.
I would be happy to be advised of the best way to do it.
There is no "best" way to skin the proverbial cat. There is always more
than one way and each has its advantages and drawbacks.
Also, when I initialize the array, I preffer that it will take as little text space as possible (for example, the best will be to define it all in one line!).
Yes, you could do that too if your array doesn't change. But it's usually
a maintenance nightmare.
const char arr_[] = "ONE\01\0Two\02\0THREE\03\0";
/* ^0 ^4 ^6 ^10^12 ^18
const char* const Arr[3][2] =
{{ arr_, arr_+ 4 }, { arr_+ 6, arr_+ 10 }, { arr_+12, arr_+18 }};
V
"Rafi Kfir" <ra*******@telrad.co.il> wrote in message
news:f7**************************@posting.google.c om... Hi,
This may look as a smiple task to most of you, but to me (a beginner with C), it drives me crazy.
news:comp.lang.c if you really are interested in C and not C++. All I want is that one function passes a two dimensional array of strings to another function.
It's impossible to pass arrays in C or C++. You have to use pointers
instead. This is one reason (among many) to use vectors instead of arrays in
C++. example: NOTE: the strings can be of different length and the array will be initialized many times to differnt values.
void fun_1() { char **Arr[3][2]= {'\0'}; //I want to define a 3x2 array of strings
char* Arr[3][2] = { { "ONE", "1" }, { "TWO", "2" }, { "THREE", "3" } };
of //different length (max 32 ch) //Arr initialization // Arr ["ONE", "1"] // ["Two", "2"] // ["THREE", "3"]
fun2(Arr); }
void fun_2(char **rcvArr)
void fun_2(char* (*rcvArr)[2])
Horrible.
{
}
CAn anybody help me with how to define it, how to initialize it and hwo to send and receive it as a parameter.
I suspect that I must define some buffer length. The question is should I select fixed length (e.g. 32 ch per string) or a veriable length. In the other option I would probably need to use malloc in order to allocate memory...
Yes, you are right. I would be happy to be advised of the best way to do it. Also, when I initialize the array, I preffer that it will take as little text space as possible (for example, the best will be to define it all in one line!).
Decide what you are programming, C or C++. Post to the appropriate
newsgroup.
If you are programming C then you have to do something like the rubbish
above.
If you are programming C++, then you can use vector and string and forget
about the rubbish above.
#include <vector>
#include <string>
using namespace std;
struct StringPair
{
StringPair(string f, string s)
{
first = f;
second = s;
}
string first;
string second;
};
typedef vector<StringPair> StringArray;
void fun_2(StringArray& Arr)
{
// do something with Arr
}
int main()
{
StringArray Arr;
Arr.push_back(StringPair("ONE", "1"));
Arr.push_back(StringPair("TWO", "2"));
Arr.push_back(StringPair("THREE", "3"));
}
Now don't you think that a bit easier. Everything is dynamic, everything
gets freed automatically.
john
#include <stdlib.h>
#include <stdio.h>
void print(char *arg[])
{
int i,j;
for( i = 0; i < 3; i++)
{
for( j = 0; j < 4; j++)
{
printf("%c",arg[i][j]);
}
printf("\n");
}
}
int main()
{
char **ch;
int i,j;
ch = (char**)calloc(3,sizeof(char*));
for(i = 0; i < 3; i++)
{
ch[i] = (char *)calloc(4,sizeof(char));
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
ch[i][j] = 'c';
}
}
print(ch);
return 0;
}
#include <stdlib.h>
#include <stdio.h>
void print(char *arg[])
{
int i,j;
for( i = 0; i < 3; i++)
{
for( j = 0; j < 4; j++)
{
printf("%c",arg[i][j]);
}
printf("\n");
}
}
int main()
{
char **ch;
int i,j;
ch = (char**)calloc(3,sizeof(char*));
for(i = 0; i < 3; i++)
{
ch[i] = (char *)calloc(4,sizeof(char));
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
ch[i][j] = 'c';
}
}
print(ch);
return 0;
}
#include <stdlib.h>
#include <stdio.h>
void print(char *arg[])
{
int i,j;
for( i = 0; i < 3; i++)
{
for( j = 0; j < 4; j++)
{
printf("%c",arg[i][j]);
}
printf("\n");
}
}
int main()
{
char **ch;
int i,j;
ch = (char**)calloc(3,sizeof(char*));
for(i = 0; i < 3; i++)
{
ch[i] = (char *)calloc(4,sizeof(char));
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
ch[i][j] = 'c';
}
}
print(ch);
return 0;
}
oops, guess i should have read the bright red instruction at the top of the
page telling me not to resubmit if my reply doent show up right away. sorry
about that
In article <f7**************************@posting.google.com >,
Rafi Kfir <ra*******@telrad.co.il> wrote: This may look as a smiple task to most of you, but to me (a beginner with C), it drives me crazy.
All I want is that one function passes a two dimensional array of strings to another function.
Doing this using old-style arrays and char* "strings" is *not* a simple
task, even for experienced programmers. C++ has tools that make it much
easier, namely the standard 'vector' and 'string' data types.
example: NOTE: the strings can be of different length and the array will be initialized many times to differnt values.
No problem. The standard 'string' type automatically resizes itself
appropriately.
#include <vector>
#include <string>
using namespace std;
void fun_1() { char **Arr[3][2]= {'\0'}; //I want to define a 3x2 array of strings of //different length (max 32 ch) //Arr initialization // Arr ["ONE", "1"] // ["Two", "2"] // ["THREE", "3"]
vector<vector<string> > Arr (3, vector<string>(2));
Arr[0][0] = "ONE";
Arr[0][1] = "1";
// etc. for the other elements fun2(Arr); }
void fun_2(char **rcvArr)
void fun_2 (vector<vector<string> >& rcvArr)
// and make it const if you don't plan to modify the data inside the
// function{
}
--
Jon Bell <jt*******@presby.edu> Presbyterian College
Dept. of Physics and Computer Science Clinton, South Carolina USA
void Func(char**);
//I don't work with pointers to pointers much
//so I'd have to look-up the correct way to make
//the above argument const-correct.
int main()
{
char* string_array[3][2];
string_array[0][0] = "One";
string_array[0][1] = "1";
string_array[1][0] = "Two";
string_array[1][1] = "2";
string_array[2][0] = "Three";
string_array[2][1] = "3";
Func(string_array);
}
void Func(char** string_array);
{
}
-JKop This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: news.hku.hk |
last post by:
is there any way to make a loop to store strings??
e.g. abc.txt contains 3 lines i.e.
this is line 1.
this is line 2.
this is line 3.
i want...
|
by: Anthony |
last post by:
Hello,
I am writing a function that populates an array of pointers to
strings. Both the number of strings in the array, and the lengths of
the...
|
by: Alan |
last post by:
hi all,
I want to define a constant length string, say 4
then in a function at some time, I want to set the string to a constant
value, say a...
|
by: robbie.carlton |
last post by:
Hello!
I've programmed in c a bit, but nothing very complicated. I've just
come back to it after a long sojourn in the lands of functional...
|
by: Robert W. |
last post by:
I have a situation where I have pairs of strings that I want to put into an
ArrayList and then later pull out of it.
To keep things simple I...
|
by: Michael |
last post by:
Hi,
I am trying to pass a function an array of strings, but I am having trouble
getting the indexing to index the strings rather than the...
|
by: Potiuper |
last post by:
Question: Is it possible to use a char pointer array ( char *<name> ) to read an array of strings from a file in C?
Given: code is written in ANSI...
|
by: =?Utf-8?B?bWFnZWxsYW4=?= |
last post by:
Hi,
I'd appreciae any advice on how to do this in VB 2005.
I have a simple array;e..g, a list of States, e.g., CA, WA, ID, AL, and
etc...
...
|
by: tammygombez |
last post by:
Hey fellow JavaFX developers,
I'm currently working on a project that involves using a ComboBox in JavaFX, and I've run into a bit of an issue....
|
by: tammygombez |
last post by:
Hey everyone!
I've been researching gaming laptops lately, and I must say, they can get pretty expensive. However, I've come across some great...
|
by: better678 |
last post by:
Question:
Discuss your understanding of the Java platform. Is the statement "Java is interpreted" correct?
Answer:
Java is an object-oriented...
|
by: teenabhardwaj |
last post by:
How would one discover a valid source for learning news, comfort, and help for engineering designs? Covering through piles of books takes a lot of...
|
by: Kemmylinns12 |
last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
|
by: CD Tom |
last post by:
This happens in runtime 2013 and 2016. When a report is run and then closed a toolbar shows up and the only way to get it to go away is to right...
|
by: CD Tom |
last post by:
This only shows up in access runtime. When a user select a report from my report menu when they close the report they get a menu I've called Add-ins...
|
by: Naresh1 |
last post by:
What is WebLogic Admin Training?
WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge...
|
by: antdb |
last post by:
Ⅰ. Advantage of AntDB: hyper-convergence + streaming processing engine
In the overall architecture, a new "hyper-convergence" concept was...
| |