Rookie_Coder2318 Rookie_Coder2318 - 24 days ago 12
C Question

C - strcpy() and char

I want to store a string to a char array inside a structure and when I access the char array I want the result to be displayed along with the value from the global variable errCode. When I access the errDesc member of the structure then I want the result to be "Error detected with error code 0xA0B0C0D0", but since using strcpy copies the string as it is I am getting a result "Error detected with error code %08lx" . Here is a sample code which replicates my issue:

int errCode = 0xA0B0C0D0;

void function(errpacket* ptr, int a, char* errString, ...);

typedef struct{
int err;
char errDesc;
}errpacket;

int main(){
errpacket* a;
void function(a, 10, "Error detected with error code %08lx", errCode);

return 0;
}

void function(errpacket* ptr, int a, char* errString, ...){
ptr->err = a;
strcpy(&ptr->errDesc, errString);
}


If my implementation is incorrect, please suggest me a way to do what I intend to. Also please point out the mistakes in the above code. I am new to coding so please bare with me...

Answer

try this fix:

#include <stdarg.h> //to be added for vsprintf use

int errCode = 0xA0B0C0D0;

void function(errpacket* ptr, int a, char* errString, ...);

typedef struct{
    int err;
    char *errDesc;
}errpacket;

int main(){
    errpacket a; //you need allocate memory if you use a pointer here
    void function(&a, 10, "Error detected with error code %08lx", errCode);

    return 0;
}

void function(errpacket* ptr, int a, char* errString, ...){
    ptr->err = a;
    ptr->errDesc = malloc(strlen(errString)+1);
    memset(ptr->errDesc, 0, strlen(errString)+1);
    /*if(ptr->errDesc != NULL)
    {
        strcpy(ptr->errDesc, errString);
    }*/
   // use like following if you want use a formatted string
   if(ptr->errDesc != NULL)
   {
        va_list args;
        va_start (args, errString);
        vsprintf (ptr->errDesc, errString, args);
        va_end (args);
   }
}