All of lore.kernel.org
 help / color / mirror / Atom feed
* assignment makes pointer from integer without a cast?
@ 2004-12-13  0:52 Patrick
  2004-12-13  1:47 ` Hossein Mobahi
  0 siblings, 1 reply; 5+ messages in thread
From: Patrick @ 2004-12-13  0:52 UTC (permalink / raw)
  To: linux-c-programming

Hello,

New to the list and to C. Read O'Reilly's Practical C Programming and
another C book and am now trying to evolve beyond helloworld.c. When I
compile the snippet below, gcc-3.4.2 on Fedora Core 3 spits out:
test2.c:11: warning: assignment makes pointer from integer without a
cast
test2.c:12: warning: passing arg 1 of `usage' from incompatible pointer
type

I just can't figure out why it does that and how to fix it since my
pointer/casting/C knowledge is definitely lacking. The snippet does work
ok. Anyone care to enlighten me?

#include <stdio.h>

void usage(int *prog_ptr)
{
	fprintf(stdout,"progname is: %s\n",*prog_ptr);
}
	
int main(int argc, char *argv[])
{
	int *prog_ptr;
	prog_ptr = basename (argv[0]);
	usage(&prog_ptr);
	return(0);
}

TIA,
Patrick

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: assignment makes pointer from integer without a cast?
  2004-12-13  0:52 assignment makes pointer from integer without a cast? Patrick
@ 2004-12-13  1:47 ` Hossein Mobahi
  2004-12-13 16:13   ` Francesco Gadaleta
  0 siblings, 1 reply; 5+ messages in thread
From: Hossein Mobahi @ 2004-12-13  1:47 UTC (permalink / raw)
  To: linux-c-programming

Patrick

Your program has a few incorrect assignments. Is
prog_ptr going to hold a string? I guess so because
you want to print program name. So "int *prog_ptr" is
wrong, use "char *prog_ptr" instead, i.e. an address
pointing to the first character of a given string. 

Moreover, you do not need to use ampersand to obtain
prog_ptr's address because it is already a pointer
itself not an ordinary variable.

Eventually, you must pass a pointer to fprintf when
you use %s. So the * is incorrect (*prog_ptr returns a
character only, the first character of your string,
which is not what you want).

I'd rewrite your program as follows:

#include <stdio.h>

void usage(char *prog_ptr) /* not int* */
{
	fprintf(stdout,"progname is: %s\n",prog_ptr); /* not
*prog_ptr */
}
	
int main(int argc, char *argv[])
{
	char *prog_ptr; /* not int * */
	prog_ptr = basename (argv[0]);
	usage(prog_ptr); /* not &prog_ptr */
	return(0);
}


--- Patrick <patrickC@puzzled.xs4all.nl> wrote:
> #include <stdio.h>
> 
> void usage(int *prog_ptr)
> {
> 	fprintf(stdout,"progname is: %s\n",*prog_ptr);
> }
> 	
> int main(int argc, char *argv[])
> {
> 	int *prog_ptr;
> 	prog_ptr = basename (argv[0]);
> 	usage(&prog_ptr);
> 	return(0);
> }



		
__________________________________ 
Do you Yahoo!? 
Yahoo! Mail - Helps protect you from nasty viruses. 
http://promotions.yahoo.com/new_mail

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: assignment makes pointer from integer without a cast?
  2004-12-13  1:47 ` Hossein Mobahi
@ 2004-12-13 16:13   ` Francesco Gadaleta
  2004-12-13 19:53     ` Jan-Benedict Glaw
  0 siblings, 1 reply; 5+ messages in thread
From: Francesco Gadaleta @ 2004-12-13 16:13 UTC (permalink / raw)
  To: linux-c-programming

[-- Attachment #1: Type: text/plain, Size: 1184 bytes --]


> void usage(char *prog_ptr) /* not int* */
> {
> 	fprintf(stdout,"progname is: %s\n",prog_ptr); /* not
> *prog_ptr */
> }
> 	
> int main(int argc, char *argv[])
> {
> 	char *prog_ptr; /* not int * */
> 	prog_ptr = basename (argv[0]);
> 	usage(prog_ptr); /* not &prog_ptr */
> 	return(0);
> }
> 
> 


change this line:
prog_ptr = basename (argv[0]);

with this:
prog_ptr = (char*) basename (argv[0]);
-- 

_________________________________________________
Imagine no possessions
I wonder if you can
No need for greed or hunger
A brotherhood of man
Imagine all the people
Sharing all the world...
		John Lennon
_________________________________________________
_________________________________________________
Francesco Gadaleta - Italian GNU/Linux User
      web site: www.gadaleta.org

email      : francesco@gadaleta.org
ICQ        : 286063291
Fingerprint: 3CB8 C721 FE99 BC98 38DC F463 BFDC E4EC CE3B 7327  (1024/DSA) [with image]
Linux Registered User #327326
________________________________________________
Non speditemi documenti in formato Word 
o Powerpoint.
RMS vi spiega il motivo qui:
http://www.gadaleta.org/allegati.html

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: assignment makes pointer from integer without a cast?
  2004-12-13 16:13   ` Francesco Gadaleta
@ 2004-12-13 19:53     ` Jan-Benedict Glaw
  2004-12-16  2:07       ` how to link mqueue library Ron Michael Khu
  0 siblings, 1 reply; 5+ messages in thread
From: Jan-Benedict Glaw @ 2004-12-13 19:53 UTC (permalink / raw)
  To: linux-c-programming

[-- Attachment #1: Type: text/plain, Size: 1633 bytes --]

On Mon, 2004-12-13 17:13:54 +0100, Francesco Gadaleta <francesco@gadaleta.org>
wrote in message <20041213161354.GD1487@sweetdream>:
> > void usage(char *prog_ptr) /* not int* */
> > {
> > 	fprintf(stdout,"progname is: %s\n",prog_ptr); /* not
> > *prog_ptr */
> > }
> > 	
> > int main(int argc, char *argv[])
> > {
> > 	char *prog_ptr; /* not int * */
> > 	prog_ptr = basename (argv[0]);
> > 	usage(prog_ptr); /* not &prog_ptr */
> > 	return(0);
> > }
> change this line:
> prog_ptr = basename (argv[0]);
> 
> with this:
> prog_ptr = (char*) basename (argv[0]);

No, better include the proper header file <libgen.h> or <string.h>
(after #defining _GNU_SOURCE). This way, you don't force gcc into
guessing it's type. If you had compiled this with a C++ compiler (*), it
wouldn't even had accepted the code or wouldn't link it later on.

MfG, JBG
(*) Compiling not-too-complicated C code with a C++ compiler can reveal
some additional oddities that a pure C compiler wouldn't warn on. So if
you keep your code being compileable with both a C and a  C++ compiler
when you start a new project, this won't hurt (but probably pay back at
some time). (-> Right, I'm a C programmer and personally don't use C++
that often, because it's too hard to write "basic" stuff with it).

-- 
Jan-Benedict Glaw       jbglaw@lug-owl.de    . +49-172-7608481             _ O _
"Eine Freie Meinung in  einem Freien Kopf    | Gegen Zensur | Gegen Krieg  _ _ O
 fuer einen Freien Staat voll Freier Bürger" | im Internet! |   im Irak!   O O O
ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* how to link mqueue library
  2004-12-13 19:53     ` Jan-Benedict Glaw
@ 2004-12-16  2:07       ` Ron Michael Khu
  0 siblings, 0 replies; 5+ messages in thread
From: Ron Michael Khu @ 2004-12-16  2:07 UTC (permalink / raw)
  Cc: linux-c-programming

Hello.

I seem to have a problem linking the mqueue library....
What's the library name to be added to the "-l" option of cc/gcc?
If -lm is for the math library... -lcurses for ncurses,
what's the library name for mqueue? -lmqueue??

-Ron.




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2004-12-16  2:07 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-12-13  0:52 assignment makes pointer from integer without a cast? Patrick
2004-12-13  1:47 ` Hossein Mobahi
2004-12-13 16:13   ` Francesco Gadaleta
2004-12-13 19:53     ` Jan-Benedict Glaw
2004-12-16  2:07       ` how to link mqueue library Ron Michael Khu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.