943,600 Members | Top Members by Rank

Ad:
  • C Discussion Thread
  • Unsolved
  • Views: 2502
  • C RSS
Sep 6th, 2008
0

sprintf: makes pointer from integer without a cast`

Expand Post »
So I'm messing with some code, trying to get more familiar with string functions, and I stumbled into an apparent error on my part. Here is my code:

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void)
  5. {
  6. int len = 0;
  7.  
  8. char *str = "This is a string";
  9. char ch = '\0';
  10. int i = 0;
  11. len = strlen(str);
  12.  
  13. i = sprintf(ch, "%X", 0x0D);
  14. strcat(str, ch);
  15. i = sprintf(ch, "%X", 0x0A);
  16. strcat(str, ch);
  17.  
  18. len = strlen(str);
  19. printf("\n%s", str);
  20. printf("str is %d chars long\n", len);
  21.  
  22. return 0;
  23. }

Those are hexadecimal values I'm trying to put in there. I understand that every ASCII character also has a decimal representation, but what else can I do to put in CR and LF to the end of strings? If I do what the error says, it would give the characters values I don't want, which would be 13, and 10, respectively.

I've read various articles on the web about this, and each one has said to use sprintf, so what am I doing wrong?

Thanks, I appreciate it.
Similar Threads
Reputation Points: 50
Solved Threads: 0
Junior Poster in Training
Diode is offline Offline
70 posts
since Jan 2005
Sep 6th, 2008
0

Re: sprintf: makes pointer from integer without a cast`

Say char ch[10]; but make sure the array is big enough.

Also, you can't do this either
strcat( str, ch ); str is a string constant (it may be in read-only memory). Modifying it will kill your program.

Use say
char str[100] = "a string";
Last edited by Salem; Sep 6th, 2008 at 3:44 pm. Reason: more code mistakes spotted
Team Colleague
Reputation Points: 5862
Solved Threads: 950
Posting Sage
Salem is offline Offline
7,164 posts
since Dec 2005
Sep 6th, 2008
0

Re: sprintf: makes pointer from integer without a cast`

Click to Expand / Collapse  Quote originally posted by Salem ...
Say char ch[10]; but make sure the array is big enough.
In this example, 10 is the index of a char array ch, but I don't want to modify the tenth element. Also, ch is a single char. I don't quite understand you mean here.
Reputation Points: 50
Solved Threads: 0
Junior Poster in Training
Diode is offline Offline
70 posts
since Jan 2005
Sep 6th, 2008
0

Re: sprintf: makes pointer from integer without a cast`

> 10 is the index of a char array ch, but I don't want to modify the tenth element.
Who said that?
It's an array of 10 chars.

char ch[10];
sprintf( ch, "%x", value );
Simple.
Team Colleague
Reputation Points: 5862
Solved Threads: 950
Posting Sage
Salem is offline Offline
7,164 posts
since Dec 2005
Sep 6th, 2008
0

Re: sprintf: makes pointer from integer without a cast`

I knew that you could just use a normal char array, but I didn't know you couldn't modify a char array pointed to by a pointer. If you type *ptr, you can access the value at the variable the pointer points do, but I guess it can't be used in strcat since I tried it earlier before I posted.

I'm practicing pointers, hence the purpose of this stupid program. I know they hold addresses to variables, and that they are useful to be passed as reference to functions so functions can modify the contents, but I'm still just a little foggy on what can be done with them.

So once a pointer to an array is declared as in the *str line, it can't be modified. I got it now.

Thanks Salem
Reputation Points: 50
Solved Threads: 0
Junior Poster in Training
Diode is offline Offline
70 posts
since Jan 2005
Sep 6th, 2008
0

Re: sprintf: makes pointer from integer without a cast`

>So once a pointer to an array is declared as in the *str line, it can't be modified. I got it now.

If you are referring to something like this char *str = "This is a string"; you are correct. It is better to think of it as a string in read only memory.
Aia
Reputation Points: 2224
Solved Threads: 218
Nearly a Posting Maven
Aia is offline Offline
2,304 posts
since Dec 2006
Sep 6th, 2008
0

Re: sprintf: makes pointer from integer without a cast`

>> but what else can I do to put in CR and LF to the end of strings?
simple
  1. char str[100] = "a string"; // see Salem's post #2 for this line
  2. strcat(str, "\r\n");
Last edited by Ancient Dragon; Sep 6th, 2008 at 11:10 pm.
Sponsor
Team Colleague
Featured Poster
Reputation Points: 5608
Solved Threads: 2282
Retired and Enjoying Life
Ancient Dragon is offline Offline
21,947 posts
since Aug 2005
Sep 8th, 2008
0

Re: sprintf: makes pointer from integer without a cast`

Gee, I totally forgot about that, thanks, Ancient Dragon. I was trying to make it too difficult.
Reputation Points: 50
Solved Threads: 0
Junior Poster in Training
Diode is offline Offline
70 posts
since Jan 2005

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C Forum Timeline: please help!! have some problems with my address book
Next Thread in C Forum Timeline: sortied list





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC