#include "stdafx.h"
#include "stdio.h"int main(int argc, char* argv[])
{
unsigned int i;
unsigned char digest[16]={222,162,11,41,52,251,2,251,118,80,100,142,244,32,85,111};
char *skey; for (i = 0; i < 16; i++)
sprintf (&skey[i], "%02x", digest[i]);
return 0;
}    以上main函数内的语句是我出问题的一段。
    本人的意思是想以16进制的格式按字节把digest的值武给*skey,编译能通过,但是执行A句时回出现非法操作.请教怎样才能正确地将digest的值传给*skey。

解决方案 »

  1.   

    int main(int argc, char* argv[]) 

    unsigned int i; 
    unsigned char digest[16]={222,162,11,41,52,251,2,251,118,80,100,142,244,32,85,111}; 
    char *skey=new char[20]; for (i = 0; i < 16; i++) 
    sprintf (&skey[i], "%02x", digest[i]); 
    return 0; 
      

  2.   

    很显然错了,会出现非法访问的错误!
    skey 空间都没分配!!!!
      

  3.   

    int main(int argc, char* argv[]) 

    unsigned int i; 
    unsigned char digest[16]={222,162,11,41,52,251,2,251,118,80,100,142,244,32,85,111}; 
    char *skey=new char[20]; for (i = 0; i < 16; i++) 
    sprintf (&skey[i], "%02x", digest[i]); 
    delete skey;
    return 0; 
      

  4.   

    在真正的程序中skey是给了初始值的。
      

  5.   

    如果不delete的话,会出现内存泄漏,不过对于你这种main函数影响不大,毕竟只是运行一次程序就结束了,但如果new函数在循环里面的话,而且程序长时间运行而不退出的话就容易出现问题,还是规范点好。
      

  6.   

    skey 没有分配空间,程序读取的是一个不确定的地址.编译的时候,编译器,不检测这样的错误的.只有在运行时才会对skey所指向的内存空间读写.而你没有对skey分配内存.所以会出现错误.