• C

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

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?
LVL 2
khoamaAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Infinity08Commented:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Infinity08Commented:
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
khoamaAuthor Commented:
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
Prepare for an Exciting Career in Cybersecurity

Help prevent cyber-threats and provide solutions to safeguard our global digital economy. Earn your MS in Cybersecurity. WGU’s MSCSIA degree program curriculum features two internationally recognized certifications from the EC-Council at no additional time or cost.

Infinity08Commented:
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
Infinity08Commented:
>> 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
khoamaAuthor Commented:
hi guy please do not misunderstand me,Your answer is clear.Thanks for your comments
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.