View previous topic :: View next topic |
Author |
Message |
vortexe90
Joined: 26 Feb 2013 Posts: 30 Location: Algeria
|
STRING FUNCTIONS |
Posted: Tue Feb 26, 2013 7:12 am |
|
|
Hi guys, I have a problem in using the structure STRCPY copy. I want to copy a part from a well-defined string so I copied the letters one by one and then I concatenate formed to the desired word, but always shows me nothing.
Below is my code:
I use PIC C compiler v4.130
Code: | #include <16F877.h>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock = 4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#include <string.h>
char s4[20]="abcpomefg";
char s1[20],s2[20],s3[20];
void main()
{
strcpy(s1, s4[3]);
strcpy(s2, s4[4]);
strcpy(s3, s4[5]);
strcat(s1,s2);
strcat(s1,s3);
printf("RESULT= %s\n",s1);
while(1);
} |
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19553
|
|
Posted: Tue Feb 26, 2013 7:32 am |
|
|
strcpy, expects an address for both variables. So:
strcpy(s1, &s4[3]);
or
strcpy(s1, s4+3);
You then look to run out of space in the catenation.
s1 is initially 9 characters (10 array entries). You then add 6 characters to this (so 15 entries needed), then five, so need _21_ characters to store the final string. Remember a string is always one character longer than the text it contains.
Best Wishes |
|
|
vortexe90
Joined: 26 Feb 2013 Posts: 30 Location: Algeria
|
|
Posted: Tue Feb 26, 2013 8:01 am |
|
|
First of all I thank you "Telmah", but with this method I can just copy the last part of my string
that is to say if I strcpy (s1, s4+1), the result will be all of the string s4, except the first letter.
In my case I just want to copy the letters "p", "o", "m" of my s4 string [20] = "abcpomefg"
in my case I want to have the following result "pom" in s1
thank you in advance |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19553
|
|
Posted: Tue Feb 26, 2013 8:42 am |
|
|
Yes.
However to just copy three letters, look at strncpy. Exactly the same as strcpy, except it just moves 'n' characters.
Best Wishes |
|
|
vortexe90
Joined: 26 Feb 2013 Posts: 30 Location: Algeria
|
|
Posted: Wed Feb 27, 2013 2:44 am |
|
|
Thank you very much my friend, it was working well |
|
|
stoyanoff
Joined: 20 Jul 2011 Posts: 375
|
|
Posted: Wed Feb 27, 2013 5:03 am |
|
|
Hi! I have similar problem. I want to make a big string from few smaller.
Here is my code:
Code: |
int year=2013;
int month=2;
int day=27;
char yearString[5];
char monthString[3];
char dayString[3];
char space=" ";
char bigArray[11];
void TransformIntToString()
{
sprintf(yearString,"%lu",year);
sprintf(monthString,"%lu",month);
sprintf(dayString,"%lu",day);
}
void FillBigArray()
{
strcopy(bigArray,yearString);
strcat(bigArray,space);
strcat(bigArray,monthString);
strcat(bigArray,space);
strcat(bigArray,dayString);
}
|
There are several problems.
First: every string is added on different places in the bigArray. I think this is because it`s not creared!
Second: every strcat adds string on the old one and deleting it!
How can I fix this??
Thanks! |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19553
|
|
Posted: Wed Feb 27, 2013 6:21 am |
|
|
You are making things about 50* more complex than they need to be:
Code: |
sprintf(bigstring,"%4Lu %2u %2u",year,month,day);
|
You also need year to be declared as int16, or 'long int'. An int cannot hold 2013, and the %Lu format string tells the compiler to treat the number as a 'long', which an int is _not_, which is probably why the first version goes wrong.
Best Wishes |
|
|
stoyanoff
Joined: 20 Jul 2011 Posts: 375
|
|
Posted: Thu Feb 28, 2013 12:40 am |
|
|
Thanks! |
|
|
vortexe90
Joined: 26 Feb 2013 Posts: 30 Location: Algeria
|
|
Posted: Thu Feb 28, 2013 3:14 pm |
|
|
what means that the operator : |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Thu Feb 28, 2013 3:32 pm |
|
|
vortexe90 wrote: | what means that the operator : | Sorry, but this is just a very basic C question, not specially related to embedded programming using the CCS compiler.
Search the internet for the phrase "conditional operator". |
|
|
|