读书人

构造体操作

发布时间: 2013-07-04 11:45:32 作者: rapoo

结构体操作
我在编写android NDK需要测试下调用C的结构体,但是C基本不懂,谁能给我完善下下面简单的文件,C语言的。
我写了一个头文件:

typedef struct {
unsigned char ch;
unsigned long data;
unsigned char pp[3];
} EMV_TEST;
就一个结构里,包含3中类型。
下面是c文件:
#include "demo.h"

void setEMV(EMV_TEST *emvT) {


void getEMV(EMVTEST *emvT) {


}
void main(){

}
这C里不知道怎么操作,我想实现在setEMV函数里给结构体每个属性赋值。
再在getEMV里能得到结构体每个属性的值,注意是能得到每个属性。因为我JNI中想把每个属性都转换成jstring。3种类型都给我演示下。代码尽量写完成,我拿来可以直接运行测试,十分感谢。
[解决办法]
一样的,直接这样即可:

void EMVLIB_GetParameter(EMV_PARAM* stParam)
{
stParam.ch = 'S';
stParam.data = 6502L;
strcpy(et.stParam, "HS");
}

调用时,

EMV_PARAM st;
EMVLIB_GetParameter(&st);


引用:
Quote: 引用:

不用封装,直接访问即可:

#include <string.h>
#include <stdio.h>

typedef struct
{
unsigned char ch;
unsigned long data;
unsigned char pp[3];
}EMV_TEST;

int main(void)
{
EMV_TEST et;

et.ch = 'S';
et.data = 6502L;
strcpy(et.pp, "HS");

printf("%c\n", et.ch);
printf("%ld\n", et.data);
printf("%s\n", et.pp);

return 0;
}
谢谢,这个我理解了,我也不想封装那些,只是我android实际开发中需要用到那种场景。
例如我有这么一个函数
void EMVLIB_GetParameter(EMV_PARAM *stParam)

我这个函数可以获取EMV_PARAM 这个结构体结果。我需要获取里面的每一个属性值怎么写?
可是这里返回的是一个指针吧?

[解决办法]
引用:

如果是给结构体里的char[]赋值,
EMV_AppList ea;
strcpy(ea.AppName, appName);
strcpy(ea.AID,aid);

appName是一个string,这样写对吗?

strcpy的使用方法是:char * strcpy(char * strDest,const char * strSrc);
源字符串和目标字符串都必须是字符串地址。
假设你提到的ea.AppName和appName都是字符串地址,则这样写正确。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

不用封装,直接访问即可:

#include <string.h>
#include <stdio.h>

typedef struct
{
unsigned char ch;
unsigned long data;
unsigned char pp[3];
}EMV_TEST;

int main(void)
{
EMV_TEST et;

et.ch = 'S';
et.data = 6502L;
strcpy(et.pp, "HS");

printf("%c\n", et.ch);
printf("%ld\n", et.data);
printf("%s\n", et.pp);

return 0;
}
谢谢,这个我理解了,我也不想封装那些,只是我android实际开发中需要用到那种场景。
例如我有这么一个函数
void EMVLIB_GetParameter(EMV_PARAM *stParam)

我这个函数可以获取EMV_PARAM 这个结构体结果。我需要获取里面的每一个属性值怎么写?
可是这里返回的是一个指针吧?


指针的时候 直接用->操作符替换.就行了
例如:stParam->ch; stParam->data; st->pp;就可以了

EMV_PARAM st;
EMVLIB_GetParameter(&st);

我EMVLIB_GetParameter这个函数原型是
void EMVLIB_GetParameter(EMV_PARAM *stParam)

需要的参数是指针。给结构体加一个"&"就是指针了吗?

是的
取结构体变量的地址 如struct EMV_PARAM str的地址 直接&str
定义就用struct EMV_PARAM * str;

[解决办法]
是的。

引用:
Quote: 引用:

一样的,直接这样即可:

void EMVLIB_GetParameter(EMV_PARAM* stParam)
{
stParam.ch = 'S';
stParam.data = 6502L;
strcpy(et.stParam, "HS");
}

调用时,

EMV_PARAM st;


EMVLIB_GetParameter(&st);



Quote: 引用:

Quote: 引用:

不用封装,直接访问即可:

#include <string.h>
#include <stdio.h>

typedef struct
{
unsigned char ch;
unsigned long data;
unsigned char pp[3];
}EMV_TEST;

int main(void)
{
EMV_TEST et;

et.ch = 'S';
et.data = 6502L;
strcpy(et.pp, "HS");

printf("%c\n", et.ch);
printf("%ld\n", et.data);
printf("%s\n", et.pp);

return 0;
}
谢谢,这个我理解了,我也不想封装那些,只是我android实际开发中需要用到那种场景。
例如我有这么一个函数
void EMVLIB_GetParameter(EMV_PARAM *stParam)

我这个函数可以获取EMV_PARAM 这个结构体结果。我需要获取里面的每一个属性值怎么写?
可是这里返回的是一个指针吧?
继续请问一下
EMV_PARAM st;
EMVLIB_GetParameter(&st);
我EMVLIB_GetParameter这个函数原型是
void EMVLIB_GetParameter(EMV_PARAM *stParam)
需要的参数是指针。给结构体加一个"&"就是指针了吗?

读书人网 >C语言

热点推荐