Sponsored Content
Top Forums Programming How do I copy or rewind *argv[] Post 302543305 by agama on Saturday 30th of July 2011 10:07:54 PM
Old 07-30-2011
Here's a small programme that will search through all command line parameters and print each out. It will also scan each parameter and print whether or not it contains all digits (leading whitespace is discarded such that " 123" is considered all digits. It should illustrate how to know when to stop processing command line arguments.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* return true if string contains all digits
   skips leading whitespace if skip_lws is !0
*/
int all_digits( const char *buf, int skip_lws  )
{
    const char  *sp;            /* pointer into buffer */
    int     all_dig = 1;    /* state of string */

    sp = buf;
    if( skip_lws )      /* skip leading whitespace when asked*/
        for( ; *sp && isspace( *sp ); sp++ );

    if( ! *sp )
        return 0;       /* empty string -- return false (no digits) */

    for( ; *sp; sp++ )      /* for each character until \0 */
        if( ! isdigit( *sp ) )  /* return false on first non-digit found */
            return 0;

    return 1;       /* if we finish the loop, we saw all digits */
}

int main (int argc, const char **argv)
{
    int i;

    fprintf( stderr, "there are %d arguments on the command line\n", argc-1 );

    for( i = 1; i < argc; i++ )         /* for each argument */
    {
        fprintf( stderr, "parameter %d = %s\n", i, argv[i] );
        if( all_digits( argv[i], 1 ) )
            fprintf( stderr, "\targument is all digits\n" );
        else
            fprintf( stderr, "\targument is NOT all digits\n" );
    }

    return 0;
}

Arguments from the command line are zero terminated. From the example above the statement for( ; *sp; sp++ ) will stop when the character pointed to by sp is zero. It is the same as using:
Code:
for( ; *sp != 0; sp++ )

So, to answer your question about what *argv[1]+4 will equal when argv[1] is "eric" -- it should be zero.

Quote:
Also what should i equal,
in the code below.
Code:
argd[i-1]

I'm not sure what you are asking here.
 

10 More Discussions You Might Find Interesting

1. 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

2. UNIX for Dummies Questions & Answers

What is the function of rewind()?

What is the function of rewind()? (2 Replies)
Discussion started by: tigerkin
2 Replies

3. 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

4. Programming

Problem with fgets and rewind function ..

Hello Friends, I got stuck with fgets () & rewind() function .. Please need help.. Actually I am doing a like, The function should read lines from a txt file until the function is called.. If the data from the txt file ends then it goes to the top and then again when the function is called... (1 Reply)
Discussion started by: user_prady
1 Replies

5. 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

6. UNIX for Dummies Questions & Answers

Need help to understand cpio and no rewind tapes

SCO openserver 5r5 I only have this available to me ... To list the files... cpio -itcvB < /dev/nrct0 To copy a file out cpio -icvdBum filename < /dev/nrct0So cpio is to archive or "zip" files up?? and /dev/nrct0 is the tape drive ??? How can i list all the files inside... (2 Replies)
Discussion started by: khaos83_2000
2 Replies

7. Programming

ARGV help in C

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

8. 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

9. 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

10. 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
getopt(3)						     Library Functions Manual							 getopt(3)

Name
       getopt - get option letter from argument vector

Syntax
       #include <stdio.h>
       int getopt (argc, argv, optstring)
       int argc;
       char **argv;
       char *optstring;

       extern char *optarg;
       extern int optind, opterr;

Description
       The  subroutine	returns the next option letter in argv that matches a letter in optstring.  The optstring is a string of recognized option
       letters; if a letter is followed by a colon, the option is expected to have an argument that may or may not be separated from it  by  white
       space.  The optarg is set to point to the start of the option argument on return from

       The  function places in optind the argv index of the next argument to be processed.  The external variable optind is automatically initial-
       ized to 1 before the first call to

       When all options have been processed (that is, up to the first non-option argument), returns EOF.  The special option --  may  be  used	to
       delimit the end of the options; EOF will be returned, and -- will be skipped.

Diagnostics
       The function prints an error message on stderr and returns a question mark (?)  when it encounters an option letter that is not included in
       optstring.  Setting opterr to 0 disables this error message.

Examples
       The following code fragment shows how one might process the arguments for a command that can take the mutually exclusive options a  and	b,
       and the options f and o, both of which require arguments:
       #include <stdio.h>
       main (argc, argv)
       int argc;
       char **argv;
       {
	      int c;
	      extern int optind, opterr;
	      extern char *optarg;
	      .
	      .
	      .
	      .
	      while ((c = getopt (argc, argv, "abf:o:")) != EOF)
		       switch (c) {
		       case 'a':
			       if (bflg)
				       errflg++;
			       else
				       aflg++;
			       break;
		       case 'b':
			       if (aflg)
				       errflg++;
			       else
				       bproc( );
			       break;
		       case 'f':
			       ifile = optarg;
			       break;
		       case 'o':
			       ofile = optarg;
			       bufsiza = 512;
			       break;
		       case '?':
			       errflg++;
		       }
	       if (errflg) {
		       fprintf (stderr, "usage: . . . ");
		       exit (2);
	       }
	       for ( ; optind < argc; optind++) {
		      if (access (argv[optind], 4)) {
	       .
	       .
	       .
       }

See Also
       getopt(1)

																	 getopt(3)
All times are GMT -4. The time now is 03:22 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy