用scanf给结构体指针进行赋值时出现问题,具体问题和代码如下,麻烦各位帮忙看下问题是什么?

问题:Unhandled exception at 0x10296551 (msvcr90d.dll) in file0718.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd.
代码:
wp=(struct WNews*)malloc(sizeof(struct WNews));
if (wp==NULL)
{
printf("out of memery!\n");
exit(1);
}
struct WNews
{
char *szSN;
unsigned char *pPubKey;
int nPubKeyLen;
};
struct WNews *wp;

scanf("%s%s%d",wp->szSN,wp->pPubKey,&(wp->nPubKeyLen));
printf("wp的各值为:wp.szSN=%s,wp.pPubKey=%s,wp.nPubKeyLen=%d\n",wp->szSN,wp->pPubKey,wp->nPubKeyLen);

wp要初始化,另外结构体里面的szSN,pPubKey也要分配空间,有了空间才能往里面赋值。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-23
struct WNews
{
char *szSN; //这里的指针也需要分配空间,考虑改成数组

unsigned char *pPubKey; //这里的指针也需要分配空间,考虑改成数组
int nPubKeyLen;
};
第2个回答  2012-07-23
指针没有初始化?追问

我在定义一个结构体变量struct Wnews p;
p=℘这样可以吗

追答

wp->szSN,wp->pPubKey这两个指针需要初始化,并且需要分配相应的空间来保存你用scanf获取的内容。

第3个回答  2012-07-23
结构体里用数组不要用指针
第4个回答  2012-07-23
wp到底是指针还是变量名 是指针的话 wp.szsn这种用法可以吗追问

wp是变量名。变量的话可以这么写。用指针变量我赋值时成功的。想用结构体指针操作。

追答

wp=(struct WNews*)malloc(sizeof(struct WNews));
wp->szSN

明明是指针

追问

弄错了,结构体的定义应该是在代码的最前面。就是指针,我明明分配了空间。代码调试没问题,运行就会出上述错误

相似回答