Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

How to split a string and put its element in a array?

Posted on 2007-04-03
Medium Priority
399 Views
I'd like to split a string and put its element into an array.For example, I have a string
ls -l arg
and an array
char *arg[]
I'd like to split that string and assign each substring for elements of the array.The expected result is
arg[0]= ls;
arg[1]= -l;
arg[2]= arg
I use strktok function with the delimiter is space character but it seems did not work. Do i have to malloc for the array because we do not know the number of substrings?
0
Question by:khoama
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 4
• 2

LVL 53

Accepted Solution

Infinity08 earned 1500 total points
ID: 18841798
strtok will work just fine. Either you do it like this :

char str[] = "ls -l arg";
char *str_ptr;
char *arg[3] = { 0 };
int count = 0;
str_ptr = strtok(str, " ");
while (str_ptr) {
arg[count++] = str_ptr;
str_ptr = strtok(NULL, " ");
}

And then you have to realise that the arg array's elements point INTO the original str like this :

"ls\0-l\0arg"
^   ^   ^
|    |    arg[2]
|    arg[1]
arg[0]

If you don't want that, you'll have to COPY the tokens :

char str[] = "ls -l arg";
char *str_ptr;
char *arg[3] = { 0 };
int count = 0;
str_ptr = strtok(str, " ");
while (str_ptr) {
arg[count] = malloc(strlen(str_ptr) + 1);
strcpy(arg[count++], str_ptr);
str_ptr = strtok(NULL, " ");
}
/* don't forget to free the arg elements !! */
0

LVL 53

Expert Comment

ID: 18841799
Note that in both cases, the original string is modified (every space is replaced by a NULL character) !!

http://www.cplusplus.com/reference/clibrary/cstring/strtok.html
0

LVL 2

Author Comment

ID: 18842182
thanks for your reply.Can you show me a full, easy-to-understand, source about String,Pointer,Array (multi-dimension),I/O,FILE (how to manipulate a file) in C? I understand them but still ambiguous
0

LVL 53

Expert Comment

ID: 18842183
Why a B grade ? Is there something that wasn't clear ? If so, just ask for clarification ...

You don't have to accept the solution if you're not happy with it !!
0

LVL 53

Expert Comment

ID: 18842195
>> Can you show me a full, easy-to-understand, source about String,Pointer,Array (multi-dimension),I/O,FILE (how to manipulate a file) in C?

This is not something that can easily be answered. I suggest reading up on these topics. If you have specific questions, you can always ask them here, and we'll be glad to answer them for you !

This is a good tutorial :

http://www.cplusplus.com/doc/tutorial/

It's for C++, but the chapters about pointers and arrays are valid for C too.

For C I/O, check the reference :

http://www.cplusplus.com/reference/clibrary/cstdio/

It contains explanations for each function, including examples showing how to use it.
0

LVL 2

Author Comment

ID: 18843795
0

Featured Post

Question has a verified solution.

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

This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.
Suggested Courses
Course of the Month7 days, 5 hours left to enroll