How to store argv[x] in my program???


 
Thread Tools Search this Thread
Top Forums Programming How to store argv[x] in my program???
# 1  
Old 12-18-2011
How to store argv[x] in my program???

Hi friends,
I have this problem that I am facing, I want to store an argument which is passed to main, and I want to store it as an array of characters. I can store number arguments with the help of x = atoi(argv[1]). Now suppose I passed the argument
Code:
Hello

to main, how can I store it somewhere in my program? I can access that "hello" through
Code:
argv[1]

but how can I store it in another variable, so that I can carry different operations on it? What can kind of variable is able to hold the value of
Code:
argv[1]

And is it only the SPACE character which seperates different arguments passed to the main, or is there any other character other than space which can act as seperator?
Looking forward to your wonderful replies.

Thanks in advance!
# 2  
Old 12-18-2011
Code:
#include <string.h>
int main(int argc, char **argv)
{
    char arg[80]={0x0};
    strcpy(arg, argv[3]);
    printf("arg = %s\n", arg);
    return 0;
}

This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 12-18-2011
I think you had better dynamically allocate the memory to hold the string copy. A fixed length buffer is subject to buffer overflows. strdup(3) would do the work for you. Alternatively, you can use malloc and strcpy to do the same work.
This User Gave Thanks to pflynn For This Post:
# 4  
Old 12-18-2011
Quote:
Originally Posted by gabam
And is it only the SPACE character which seperates different arguments passed to the main, or is there any other character other than space which can act as seperator?
The separator is one of the characters in the IFS variable, which can be modified to suit your needs
Note that you can still pass arguments with embedded separators by single or double quoting them.
This User Gave Thanks to jlliagre For This Post:
# 5  
Old 12-18-2011
Quote:
Originally Posted by jlliagre
The separator is one of the characters in the IFS variable, which can be modified to suit your needs
That's only true when the program's being launched by a shell. Even then, it's the shell that does the splitting, not the program.
This User Gave Thanks to Corona688 For This Post:
# 6  
Old 12-18-2011
@Corona688: I don't get your comment unless I'm really misunderstanding the initial question.

The open poster is referring to argv so IMHO clearly asking about how parameters are split before calling the main function, not inside it.

The shell is also the usual way to launch a program and probably also the one the open poster is thinking of when referring to arguments being separated by a space character.

---------- Post updated at 21:12 ---------- Previous update was at 20:14 ----------

@gabam: about your separator question, can you clarify how you are calling your main and especially passing arguments to it. i.e. from the shell or from withing another C program ? In the latter case, with what function ?
This User Gave Thanks to jlliagre For This Post:
# 7  
Old 12-19-2011
pflynn is correct in suggesting using malloc.

However the base requirement is not reasonable. As far as I can see. You already have strings in **argv.

If you need to call them something useful like one, two and three ( you make up meaningful names) use pointers. Duplicating them serves no logical purpose except to use memory. The only time you would care about duplicating them is when both of these are true:

1. you need to keep them for later use, unchanged

2. you plan to change them (The C standard says you can modify them, you cannot tack more characters onto the end of each one, though). If you are concatenating **argv strings onto one of the **argv strings, then create duplicates.

otherwise use pointers to those strings. simple example:
Code:
#include <stdlib.h>
#include <errno.h>
int main(int argc, char **argv)
{
    char *one=argv[1];
    char *two=argv[2];
    char *three=argv[3];
    if(argc!=4)  // we want 3 parameters, as an example
    {
         errno=EINVAL;
         perror("3 parameters required, no more, no less");
         exit(1);
     }
     // do things with one, two && three 
     return 0;
}

This User Gave Thanks to jim mcnamara For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

ARGV how to use it?

So i am trying to read in file readFile <GivenFile> modFile looking for a regular file under the directories in the GivenFile and print them out is my over all goal. basically I am looking for anything that looks like a directory in the given file and printing it out. Since I am trying to do... (2 Replies)
Discussion started by: squidGreen
2 Replies

2. UNIX for Advanced & Expert Users

O argv, argv, wherefore art thou argv?

All of my machines (various open source derivatives on x86 and amd64) store argv above the stack (at a higher memory address). I am curious to learn if any systems store argv below the stack (at a lower memory address). I am particularly interested in proprietary Unices, such as Solaris, HP-UX,... (9 Replies)
Discussion started by: alister
9 Replies

3. Shell Programming and Scripting

How to read a file line by line and store it in a variable to execute a program ?

Hello, I am quite new in shell scripting and I would like to write a little scritp to run a program on some parameters files. all my parameters files are in the same directory, so pick them up with ls *.para >>dirafter that I have a dir file like that: param1.para param2.para etc... I... (2 Replies)
Discussion started by: shadok
2 Replies

4. Programming

help with C, argv

when i run my program, i have a parameter, that i want to set the value to another string i am using int main(int argc, char **argv) { char my_str=argv; printf("%s",my_str); return 0; } and i get Segmentation fault ran using ./my_prog /usr/share/dict/words hello1 ... (2 Replies)
Discussion started by: omega666
2 Replies

5. Programming

ARGV help in C

Hi, Can somehelp help how to list file in a dir? (5 Replies)
Discussion started by: Learnerabc
5 Replies

6. Shell Programming and Scripting

$#Argv in Csh

Hello all, Had a quick question: In a typical csh script should inputting via stdin (i.e. set i = $< ) increase the value of $#argv ? echo enter an value: set val= "$<" if($#argv == 0) then echo No args else echo The arg is $argv so if a value is inputted #argv... (1 Reply)
Discussion started by: new2C
1 Replies

7. Shell Programming and Scripting

if #argv = (this OR that) then...

this is in one of my scripts... if ($#argv == 0) then echo 'blah bla' exit 0 endif I want it to be something like this... if ($#argv == 0 OR $argv >=3) echo 'blah bla' exit 0 endif so when the arguments are none, or greater than three I want this "if then" to take over. how? I... (5 Replies)
Discussion started by: ajp7701
5 Replies

8. Programming

help for argv argc

Hi C experts, I have the following code for adding command line option for a program int main (argc, argv) int argc; char *argv; { char *mem_type; //memory type char *name; //name of the memory int addr; //address bits int data; ... (5 Replies)
Discussion started by: return_user
5 Replies

9. Programming

Using argv argc

I searched on the forums. No advises. I am using a previous source code. I changed the main function main(int argc, char **argv) in a function misc(int argc, char **argv). How do you use the argc and argv parameters? This is how I am calling the function : char param; strcat(param,"wgrib ");... (4 Replies)
Discussion started by: Akeson Chihiro
4 Replies

10. Programming

argv

I have a program which I wish to modify. It used to be run from the command line, but now I wish to change this so it can be used as a function. The program has complex argument processing so I want to pass my paramters to as if it were being called by the OS as a program. I have tried to... (2 Replies)
Discussion started by: mbb
2 Replies
Login or Register to Ask a Question