•
•
•
•
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
![]() |
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):
CODE SUMMARY (from myfuncs.h):
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)
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)
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*.
But what you attempt to return is more worrisome.
You may want to take a peek at this.
/* 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)); }
You may want to take a peek at this.
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*.
•
•
•
•
But what you attempt to return is more worrisome.
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!
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:
>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:
>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.
I would think it would be obvious:
char *
getstring (char strquestion[255])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;
}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.
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.
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:
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?
>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])>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.
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?
Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast
#6
Apr 23rd, 2005
•
•
Join Date: Nov 2004
Location: Tucson, Az
Posts: 107
Reputation:
Rep Power: 4
Solved Threads: 2
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.
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.
Server: irc.daniweb.com
Channel: #C++
Chat Via:
http://daniweb.com/chat/minichat.php
or
Your favorite IRC client.
Re: total newb - "passing arg 2 of `strcpy' makes pointer from integer without a cast
#8
Apr 23rd, 2005
•
•
Join Date: Nov 2004
Location: Tucson, Az
Posts: 107
Reputation:
Rep Power: 4
Solved Threads: 2
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
Now I think I did the printf right I am a C++ man
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";
}
Join me on IRC:
Server: irc.daniweb.com
Channel: #C++
Chat Via:
http://daniweb.com/chat/minichat.php
or
Your favorite IRC client.
Server: irc.daniweb.com
Channel: #C++
Chat Via:
http://daniweb.com/chat/minichat.php
or
Your favorite IRC client.
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
Now I think I did the printf right I am a C++ man#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"; }
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...
The dimension of name is 4 because C allocates a place for the '\0' character that ends the string.char name[] = "Sam";
![]() |
•
•
•
•
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
•
•
•
•
•
•
•
•
DaniWeb C++ Marketplace
Other Threads in the C++ Forum
- Previous Thread: How can I write this coding?
- Next Thread: Sockets Help



Linear Mode