help for argv argc


 
Thread Tools Search this Thread
Top Forums Programming help for argv argc
# 1  
Old 12-04-2007
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; //data bits
int banks; //number of banks
int num_entries; //memory depth
int i; //internal variable
int cren; //cren variable for special cases
int y_add; //y-address bits for ldigram6tri
int x_add; //x-address bits for ldigram6tri
int sdata; //sdata bits for ldigram6tri


//Storing the memory models command line argument data into internal data variable.
for (i = 1; i < argc; i++)
{
if (!strcmp ((argv[i]) , "-type"))
mem_type = argv[i+1];
/*
.other 2 options similar to above stncmp
.
*/
else if (argc < 9)
{
printf("\nWrong options and/or arguments used.\n");
printf("Please check Syntax and try again.\n\n");
print_message(argv[0]);
return 0;
}
}

//Selector for the memory type:

if (!strcmp(mem_type, "ra2_met")) { gen_samsung_mem_ra2_met(name, num_entries, addr, data);
}
else if (!strcmp (mem_type, "ra2g_met")) { gen_samsung_mem_ra2_met(name, num_entries, addr, data);
}
else { printf("Invalid mem_type selected\n");
printf("Please check Syntax and try again.\n\n");
print_message(argv[0]);
return 10;
}

return 0;
}
/*******sub***/
void print_message (argv_t1)

char argv_t1[];
{

printf("Usage: %s <required/options : arguments>\n\n", argv_t1);
printf("required : arguments\n\n");
printf(" -help : print out command line options.\n\n\n");
}


but always get one error or another.

In function ‘main':
warning: passing argument 1 of ‘strcmp' makes pointer from integer without a cast
warning: passing argument 1 of ‘strcmp' makes pointer from integer without a cast
warning: passing argument 1 of ‘strcmp' makes pointer from integer without a cast
implicit declaration of function ‘print_message'
At top level:
warning: conflicting types for ‘print_message'
warning: previous implicit declaration of ‘print_message' was here


What would be the best way to compare the command line arguments so that I don't get the errors/warning?

Thank you very much for the help.Smilie
# 2  
Old 12-04-2007
What language do you think you are writing in?

You have a K&R main prototype and are using C++ style comments. I recommend ANSI C unless you have a good reason to use K&R. In either case don't use C++ comments unless you are writing C++.

Are you including the correct headers?

Without line numbers it's difficult to do the matching, both "mem_type" and "argv[i]" should be treated as "char *" so I don't see an obvious problem.
# 3  
Old 12-05-2007
If this is a copy and paste, I suggest you look at matching your parentheses where they are mismatched, for example:

if (!strcmp ((argv[i]) , "-type"))
# 4  
Old 12-05-2007
Hi porter
The header that I am using are
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

could you please explain what do you mean by :
Quote:
K&R main prototype and are using C++ style comments
Could you please give me a suggestion to change it?
also the error for
warning: passing argument 1 of ‘strcmp' makes pointer from integer without a cast
is due to this string compare functions:
if (!strcmp ((argv[i]) , "-type"))
mem_type = argv[i+1];


Any suggestion on that?

Thank you very much for your help and suggestions.

Hi reborg,
Thank you for the reply but I don't think that I have parenthesis problems,
# 5  
Old 12-05-2007
I had no major problem with

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

/*******sub***/
void print_message (char argv_t1[])
{
	printf("Usage: %s <required/options : arguments>\n\n", argv_t1);
	printf("required : arguments\n\n");
	printf(" -help : print out command line options.\n\n\n");
}

int main(int argc, char *argv[])
{
char *mem_type; /* memory type */
char *name; /* name of the memory */
int addr; /* address bits */
int data; /* data bits */
int banks; /* number of banks */
int num_entries; /* memory depth */
int i; /* internal variable */
int cren; /* cren variable for special cases */
int y_add; /* y-address bits for ldigram6tri */
int x_add; /* x-address bits for ldigram6tri */
int sdata; /* sdata bits for ldigram6tri */

/* Storing the memory models command line argument data into internal data variable. */
	for (i = 1; i < argc; i++) 
	{
		if (!strcmp ((argv[i]) , "-type"))
		{
			mem_type = argv[i+1];
		/*
		.other 2 options similar to above stncmp
		.
		*/
		}
		else if (argc < 9)
		{
			printf("\nWrong options and/or arguments used.\n");
			printf("Please check Syntax and try again.\n\n");
			print_message(argv[0]);
			return 1;
		}
	}

	/* Selector for the memory type: */

	if (!strcmp(mem_type, "ra2_met")) 
	{ 
		gen_samsung_mem_ra2_met(name, num_entries, addr, data);
	}
	else if (!strcmp (mem_type, "ra2g_met")) 
	{ 
		gen_samsung_mem_ra2_met(name, num_entries, addr, data);
	} 
	else 
	{ 
		printf("Invalid mem_type selected\n");
		printf("Please check Syntax and try again.\n\n");
		print_message(argv[0]);
		return 10;
	}

	return 0;
}

compiled as follows

Code:
$ gcc testx.c -Wall -Werror
testx.c: In function `main':
testx.c:51: warning: implicit declaration of function `gen_samsung_mem_ra2_met'
testx.c:19: warning: unused variable `banks'
testx.c:22: warning: unused variable `cren'
testx.c:23: warning: unused variable `y_add'
testx.c:24: warning: unused variable `x_add'
testx.c:25: warning: unused variable `sdata'

K&R refers to Kernighan and Ritchie C, the original C before standardised by ANSI.

Your prototypes were K&R, but it was ANSI C that introduced the 'void' type.

C++ comments start with

Code:
// a C++ comment

a C comment is
Code:
/* a proper C comment */

As gcc actually support C++ the preprocessor supports the C++ style comments. Other compilers will not be so lenient.

I haven't replicated your original problem though.
# 6  
Old 12-05-2007
Hi porter

Yes as I am using gcc, I don't have the C/C++ problems that you mentioned that I could get from other compilers.
thank you for the suggestions.
Regards.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Homework & Coursework Questions

Help using argc/argv in assignment

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: First, create a "hello world" program that prints "Hello World". But NOW, instead use argc to verify that a... (9 Replies)
Discussion started by: miniviking10
9 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

argc/ argv in awk

Hi guys, i'm trying to solve this problem. I have to run something like cat file1.txt | awk -f script.awk 10 if i'm in the awk script, how can i take the parameter :10 ??:wall: i try something like : BEGIN{ var=argv } {..} END{..} but obviously is not correct... (5 Replies)
Discussion started by: heaven25
5 Replies

4. Shell Programming and Scripting

ARGV and ARGC in bash 3 and bash 3.2

Hi Folks, I've prepared a shell script that takes action based on arguments and number of arguments..sample code like: ARGV=("$@") ARGC=("$#") case ${ARGV} in abc) if ; then ...... else printf "\nInvalid number of arguments, please check the inputs and... (2 Replies)
Discussion started by: SBC
2 Replies

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

6. Programming

ARGV help in C

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

7. Programming

Building an argc/argv style structure from a string (char*)

Hello All, First post. I've been struggling with the following: Given a char* string, I need to construct an "int argc, char *argv" style structure. What I'm struggling with most is handling escaped-whitespace and quotes. e.g. the string: char *s = "hello world 'my name is simon'... (10 Replies)
Discussion started by: cbarwise
10 Replies

8. Programming

dbx debugger + argv[argc]

Is it possible to use the dbx debugger with the CL options for the executable ? Say you have created a executable called myfunc which can take string arguments at run-time. You run it like this ./myfunc Hello World where Hello and World are the string arguments My question is whether... (1 Reply)
Discussion started by: JamesGoh
1 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

Featured Tech Videos