User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the C++ section within the Software Development category of DaniWeb, a massive community of 392,055 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 4,283 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C++ advertiser:
Views: 8724 | Replies: 12
Reply
Join Date: Apr 2005
Location: Dallas
Posts: 8
Reputation: atrixnet is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
atrixnet's Avatar
atrixnet atrixnet is offline Offline
Newbie Poster

Help total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast"

  #1  
Apr 22nd, 2005
When trying to compile a C program including the code below, I keep getting this error and I don't know what to do to fix it. Please explain if you can!

Complete code may be downloaded from my website at www.atrixnet.com/cquestion.zip (It's only 2 Kb)

I suppose I'll attach it to this post too, since that appears to be an available feature on this board

COMPILATION ATTEMPT:
tommy@city-it ~/cdevel
$ gcc -Wall -ansi -pedantic -mno-cygwin -I . -o myfirstlib myfirstlib.c

ERROR:
myfirstlib.c: In function `main':
myfirstlib.c:14: warning: passing arg 2 of `strcpy' makes pointer from integer without a cast
myfirstlib.c:20: warning: passing arg 2 of `strcpy' makes pointer from integer without a cast

CODE SUMMARY (main program):
#include <stdio.h>
#include <string.h>
#include <myfuncs.h>

int anumber;
char astring[255];

int
main ()
{
  printf ("This is the first time I've tried to '#include' my library!\n\n");

  anumber = getnum("Enter some kind of integer: ");
  strcpy(astring, getstring("Enter your name: "));

  printf("\nThank you, %s.  You entered %d\n", astring, anumber);

  while (getyn("\nDo you want to go again? [Y/n]")) {
     anumber = getnum("Enter some kind of integer: ");
     strcpy(astring, getstring("Enter your name: "));

     printf("\nThank you, %s.  You entered %d\n", astring, anumber);
   }

   printf("\nBye.\n");

  return (0);
}

CODE SUMMARY (from myfuncs.h):
/* will act as the buffer into which user's response will be stored */
char lineofinput[255];

/* grabs a string from the command prompt */
char
getstring (char strquestion[255])
{
  /* reset */
  char lineofinput[255];

  if (strlen (strquestion))
    printf ("%s", strquestion);

  fgets (lineofinput, sizeof (lineofinput), stdin);

  /* while we get an empty response */
  while (strlen (lineofinput) == 1)
    {
      if (strlen (strquestion) == 1)
         printf ("Empty answers not permitted.  Please try again: ");

      return (getstring (lineofinput));
    }

  return (sprintf("%s", lineofinput));
}

MY COMPILER:
tommy@city-it ~/cdevel
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/3.3.3/specs
Configured with: /gcc/gcc-3.3.3-3/configure --verbose --prefix=/usr --exec-prefi
x=/usr --sysconfdir=/etc --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-languages=c,ada,c++,d,f77,java,objc,
pascal --enable-nls --without-included-gettext --enable-libgcj --with-system-zlib --enable-interpreter --enable-threads=posix --enable-java-gc=boehm --enable-sjlj-exceptions --disable-version-specific-runtime-libs --disable-win32-registry
Thread model: posix
gcc version 3.3.3 (cygwin special)
Attached Files
File Type: zip cquestion.zip (1.2 KB, 2 views)
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Apr 2004
Posts: 3,450
Reputation: Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light 
Rep Power: 16
Solved Threads: 138
Colleague
Dave Sinkula's Avatar
Dave Sinkula Dave Sinkula is offline Offline
long time no c

Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast

  #2  
Apr 22nd, 2005
Well, your getstring returns a single char and not a char*.
/* grabs a string from the command prompt */
char
getstring (char strquestion[255])
{
  /* reset */
  char lineofinput[255];

  if (strlen (strquestion))
    printf ("%s", strquestion);

  fgets (lineofinput, sizeof (lineofinput), stdin);

  /* while we get an empty response */
  while (strlen (lineofinput) == 1)
    {
      if (strlen (strquestion) == 1)
         printf ("Empty answers not permitted.  Please try again: ");

      return (getstring (lineofinput));
    }

  return (sprintf("%s", lineofinput));
}
But what you attempt to return is more worrisome.

You may want to take a peek at this.
Reply With Quote  
Join Date: Apr 2005
Location: Dallas
Posts: 8
Reputation: atrixnet is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
atrixnet's Avatar
atrixnet atrixnet is offline Offline
Newbie Poster

Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast

  #3  
Apr 23rd, 2005
Originally Posted by Dave Sinkula
Well, your getstring returns a single char and not a char*.
Yes but how do I change that?

But what you attempt to return is more worrisome.
I'm sorry? What do you mean?

You may want to take a peek at this.
Unfortunately that isn't providing me with any answers to the question I've asked. Remember I'm a total newbie? Please help me out here by guiding me with a little easier terms to understand.

Thanks for responding to me!
Reply With Quote  
Join Date: Sep 2004
Posts: 6,022
Reputation: Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of Narue has much to be proud of 
Rep Power: 26
Solved Threads: 414
Super Moderator
Narue's Avatar
Narue Narue is online now Online
Expert Meanie

Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast"

  #4  
Apr 23rd, 2005
>Yes but how do I change that?
I would think it would be obvious:
char *
getstring (char strquestion[255])
>I'm sorry? What do you mean?
sprintf returns the number of characters printed, not a string of any sort, which is what your use of getstring suggests. You could return lineofinput, and that would satisfy the type system, but then you would have problems because lineofinput is a local variable and is destroyed when the function returns. A much better solution would be to pass a pointer to the buffer to getstring. Then you can return a pointer to the buffer with no problem:
#include <stdio.h>

char *getstring ( char buffer[], int size )
{
  if ( fgets ( buffer, size, stdin ) == NULL )
    return NULL;

  return buffer;
}

int main ( void )
{
  char buffer[BUFSIZ];

  if ( getstring ( buffer, sizeof buffer ) != NULL )
    printf ( "%s\n", buffer );

  return 0;
}
>Unfortunately that isn't providing me with any answers to the question I've asked.
Perhaps not the question you asked now. If we give you a link (Dave or I in particular), we think you need the information whether you asked for it or not.

>Please help me out here by guiding me with a little easier terms to understand.
You read book. Use reference. It help make code good.
Member of: Beautiful Code Club.
Reply With Quote  
Join Date: Apr 2005
Location: Dallas
Posts: 8
Reputation: atrixnet is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
atrixnet's Avatar
atrixnet atrixnet is offline Offline
Newbie Poster

Help Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast

  #5  
Apr 23rd, 2005
>>Yes but how do I change that?
>I would think it would be obvious:

Seriously? I just started messing with C a few days ago. I've only ever programmed in Perl and Python. The example you provided works but I still have no idea why... I'll continue to research it, but I thought the point of this board was to get help with things, not get cryptic responses that provide more questions than I started with.

So far I'm very disappointed with the quality of help I've received. It's showing me how weak the community is around C and C++ whereas the community around python and perl leaves you guys looking like... well... words that shouldn't be uttered in public foura.

And please don't tell me, "well if you love perl so much why don't you just go away"... That is so below what I hoped you'd prove to be -helpful, friendy.

char *
getstring (char strquestion[255])
Like I said -works great but means nothing to me.

>sprintf returns the number of characters printed, not a string of any sort, which is what your use of getstring suggests. You could return lineofinput, and that would satisfy the type system, but then you would have problems because lineofinput is a local variable and is destroyed when the function returns. A much better solution would be to pass a pointer to the buffer to getstring. Then you can return a pointer to the buffer with no problem:
#include <stdio.h>

char *getstring ( char buffer[], int size )
{
  if ( fgets ( buffer, size, stdin ) == NULL )
    return NULL;

  return buffer;
}

int main ( void )
{
  char buffer[BUFSIZ];

  if ( getstring ( buffer, sizeof buffer ) != NULL )
    printf ( "%s\n", buffer );

  return 0;
}
Thanks this is good information, but still doesn't /explain/ anything, like what the "*" does and where you get "BUFSIZ".

>>Unfortunately that isn't providing me with any answers to the question I've asked.
>Perhaps not the question you asked now. If we give you a link (Dave or I in particular), we think you need the information whether you asked for it or not.

OK.

>>Please help me out here by guiding me with a little easier terms to understand.
>You read book. Use reference. It help make code good.

I really can't believe you just said that. I'm already working out of a book. Dare I ask if you know of any other places I could receive better help with C than this?
Reply With Quote  
Join Date: Apr 2005
Location: Dallas
Posts: 8
Reputation: atrixnet is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
atrixnet's Avatar
atrixnet atrixnet is offline Offline
Newbie Poster

Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast

  #6  
Apr 23rd, 2005
Originally Posted by atrixnet
where you get "BUFSIZ"
Wait, sorry I forgot BUFSIZ is in the faq you showed me, but not "*".
Reply With Quote  
Join Date: Nov 2004
Location: Tucson, Az
Posts: 107
Reputation: prog-bman is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 2
prog-bman prog-bman is offline Offline
Junior Poster

Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast

  #7  
Apr 23rd, 2005
"*" are pointers they point to a memory address.
Dave and Narue are not trying to be mean and cryptic. They are just trying to get you to work things out on your own. Most of us fell that it is a disservice to tell you everything and you not find it out on your own.
Join me on IRC:
Server: irc.daniweb.com
Channel: #C++

Chat Via:
http://daniweb.com/chat/minichat.php
or
Your favorite IRC client.
Reply With Quote  
Join Date: Apr 2005
Location: Dallas
Posts: 8
Reputation: atrixnet is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
atrixnet's Avatar
atrixnet atrixnet is offline Offline
Newbie Poster

Solution Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast

  #8  
Apr 23rd, 2005
Am I to understand then that there's no way for a function to return a true string in C

aka - return("Hello, my name is Simon");
Reply With Quote  
Join Date: Nov 2004
Location: Tucson, Az
Posts: 107
Reputation: prog-bman is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 2
prog-bman prog-bman is offline Offline
Junior Poster

Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast"

  #9  
Apr 23rd, 2005
Of course there is. Like dave and prelude saud you have to use the char* type.
e.g
#include <stdio.h>
#include <string.h>

char *getSomeString(void);

int main(void)
{
    char mainString[strlen(getSomeString()) + 1];
    strcpy(mainString,getSomeString());
    printf("%s",mainString);
    getchar();
}

char *getSomeString(void)
{
    return "Some String";
}
Now I think I did the printf right I am a C++ man
Join me on IRC:
Server: irc.daniweb.com
Channel: #C++

Chat Via:
http://daniweb.com/chat/minichat.php
or
Your favorite IRC client.
Reply With Quote  
Join Date: Apr 2005
Location: Dallas
Posts: 8
Reputation: atrixnet is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 0
atrixnet's Avatar
atrixnet atrixnet is offline Offline
Newbie Poster

Help Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast

  #10  
Apr 23rd, 2005
Originally Posted by prog-bman
Of course there is. Like dave and prelude saud you have to use the char* type.
e.g
#include <stdio.h>
#include <string.h>

char *getSomeString(void);

int main(void)
{
    char mainString[strlen(getSomeString()) + 1];
    strcpy(mainString,getSomeString());
    printf("%s",mainString);
    getchar();
}

char *getSomeString(void)
{
    return "Some String";
}
Now I think I did the printf right I am a C++ man

Ok but i'm still in the dark, I'm sorry. If you say char *getSomeString... you aren't really returning a string, you're returning a pointer right? DOH!

And is it bad to say...
char mainString[] = getSomeString();

My Oreilly book says...
C has a special shorthand for initializing strings: Surround the string with double quotes to simplify initialization...
char name[] = "Sam";
The dimension of name is 4 because C allocates a place for the '\0' character that ends the string.
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

DaniWeb C++ Marketplace
Thread Tools Display Modes

Other Threads in the C++ Forum

All times are GMT -4. The time now is 11:38 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC