2012-06-29 129 views
-6
// issue with the following not returning info or just stalling... but no errors 
static int callback(void *voidParam, int argc, char **argv, char **azColName) 
{ 
    static int k = 0; 
    myReturn structReturn; 

    char *cTempF = (argv[0] ? argv[0] : "NULL"); 
    memcpy(&structReturn.cFirstName, cTempF, sizeof(cTempF));// tried strlen(cTempF)... no help 

    memcpy(voidParam + k * sizeof(structReturn), &structReturn, sizeof(structReturn)); 

    k++; 
} 

myReturn *structReturn = (myReturn*)malloc(sizeof(myReturn) * 20); 

rc = sqlite3_exec(db, pSQL, callback, structReturn, &zErrMsg); 

typedef struct ReturnTag 
{ 
    char cFirstName[100]; 
    char cLastName[100]; 
    short int iAge; 
}myReturn; 
+0

什么是您所遇到的问题是什么?请更准确地描述问题。 –

+0

我想我在评论中描述得非常好......当我执行“memcpy(&structReturn.cLastName,cTempL,strlen(cTempL))时,没有返回任何东西;”为“char * cTempF =(argv [0]?argv [0]:”NULL“);”但返回“char cTempF [] =”狗“;” – jdl

+0

你是什么意思“没有回报”?你是说'memcpy'不会将内存内容从'cTempF'复制到'structReturn.cFirstName'? –

回答

1

解决它...需要:memset(&structReturn.cFirstName, '\0', 100);

static int callback(void *voidParam, int argc, char **argv, char **azColName) 
{ 
    static int k = 0; 
    myReturn structReturn; 

    char *cTempF = (argv[0] ? argv[0] : "NULL"); 
    memset(&structReturn.cFirstName, '\0', 100); // <--- needed here 
    memcpy(&structReturn.cFirstName, cTempF, strlen(cTempF)); 

    memcpy(voidParam + k * sizeof(structReturn), &structReturn, sizeof(structReturn)); 

    k++; 
} 
+1

更有可能您只需要复制0结束符'memcpy(&structReturn.cFirstName,cTempF,strlen(cTempF)+ 1)'。 –