CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

How to call a function that expect a string

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
E_Blue



Joined: 13 Apr 2011
Posts: 417

View user's profile Send private message

How to call a function that expect a string
PostPosted: Wed Nov 27, 2019 12:30 pm     Reply with quote

I need to do this

Code:
NewMsg(GetContactID(BufferCmdMain.Qual,BufferCmdMain.Partition));


Prototypes
Code:
void NewMsg(char ContactID[12]);
char *GetContactID(char Qual,char Partition);


The second function is like this

Code:
char *GetContactID(char Qual,char Partition)
{
   char ContactID[12]

   sprintf(ContactID,"%1u A%1u ",Qual,Partition);
   
   delay_cycles(1);
   delay_cycles(1);
   delay_cycles(1);
   
     return ContactID;
}

_________________
Electric Blue


Last edited by E_Blue on Wed Nov 27, 2019 12:38 pm; edited 1 time in total
Ttelmah



Joined: 11 Mar 2010
Posts: 19221

View user's profile Send private message

PostPosted: Wed Nov 27, 2019 12:38 pm     Reply with quote

First get rid of the size in the function definition.
In C, in general, a 'string' passed to a function is just a pointer to
the data. No size associated with it. Some later C's support a size which
is then used for error checking if the data passed is larger than
required, but this is not supported in CCS.

Then just call it.

However 'caveat'. remember a string needs to be one character
larger than what it may contain. So if this ID is 12 characters, the
character array must be 13 characters long.

Your call would be:
Code:

char *GetContactID(char Qual,char Partition)
{
   char ContactID[12]

   sprintf(ContactID,"%1u A%1u ",Qual,Partition);
   
   delay_cycles(1);
   delay_cycles(1);
   delay_cycles(1);

   NewMsg(ContactID);

   return ContactID;
}

//or if you mean call with the result of the function:

NewMsg(GetContactID(x,y));

//where x and y are what the function needs
E_Blue



Joined: 13 Apr 2011
Posts: 417

View user's profile Send private message

PostPosted: Wed Nov 27, 2019 12:43 pm     Reply with quote

I just made some changes in the original post; would you read it again please.

Answering to your comment, I already do it like that, I mean I called the function like this

Code:
NewMsg(GetContactID(x,y));


But when I get inside the NewMsg function, ContactID=0x0865; so I'm getting the address of the first digit; that's why I'm here; I don't understand what I'm doing wrong.
_________________
Electric Blue
Ttelmah



Joined: 11 Mar 2010
Posts: 19221

View user's profile Send private message

PostPosted: Wed Nov 27, 2019 1:16 pm     Reply with quote

That is what it should contain. As I said, in C "In C, in general, a 'string' passed to a function is just a pointer to the data". It sounds as if your
uise of this in the NewMsg function is what is faulty.
Functions like strcmp etc., all just expect to receive such a pointer.

Code:

void demo(char IDString[])
{
    while (*IDString != '\0') //walk through the string
    {
        print("Char value is %d", *IDString);
        IDString++;
    }
}

This shows a function receiving a string, and walking through this
printing the ASCII value of each character.
E_Blue



Joined: 13 Apr 2011
Posts: 417

View user's profile Send private message

PostPosted: Wed Nov 27, 2019 1:51 pm     Reply with quote

Inside of the NewMsg function I'm calling a third function

Code:
char CrearRTH(char VectorRegla,short onlineMode,short FromUSB,char ContactID[], char *BufferX)


This way
Code:
MemoTxBuffer[1]=(CrearRTH(xVectorBit,FALSE,FALSE,ContactID,MemoTxBuffer+2))+8;


Inside that third function I create a bigger string concatenating many little strings from different functions.
Close to the end I have

Code:
XPos+=sprintf(BufferX+XPos,"%s00",*ContactID);

XPos have the amount of characters in the string(Length)

And it was working until I added *GetContactID function

Prior to this I was calling this function like this and work ok.

Code:


void PanicAlarm()
{
    char ContactID[12];

    sprintf(ContactID,"112A A1 AAA");
    NewMsg(ContactID);

_________________
Electric Blue
Ttelmah



Joined: 11 Mar 2010
Posts: 19221

View user's profile Send private message

PostPosted: Wed Nov 27, 2019 2:10 pm     Reply with quote

Seriously, you are not showing us enough to help.

My guess would be that your string building function is not correctly
creating a string (remember a string must be null terminated).

Also there is an issue in your original post, in that you try to return
a pointer to a character array inside the function. This does not exist
once the function exits. Local variables only actually exist while the
function is operating. If you want to return a pointer to a array from
inside a function, this array needs to be declared as static so it
remains in existence when the function exits.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group