尝试将数据复制到char指针值时出现异常

时间:2015-11-17 08:41:36

标签: c string exception char append

我是C的新手。我有这个打印声明,其中打印特定值。我需要将此值复制到String中。但是当我尝试复制它时,我得到以下显示的异常。

Unhandled exception at 0x00007FFCF01CB20A (msvcr120d.dll) in RFIDTest.exe: 0xC0000005: Access violation reading location 0x000000000000E200.

下面显示的是print语句,我需要将其输出放入变量中。

printf("%04X", (((epc[i] & 0xFF00) >> 8) | ((epc[i] & 0xFF) << 8)));

以下显示我是如何将其变为变量并附加它的。

strcat(("%04X", (((epc[i] & 0xFF00) >> 8) | ((epc[i] & 0xFF) << 8))),strData);

我的完整方法如下。

char* ipj_util_print_epc(uint16_t* epc, int len, bool little_endian)
{
char * strData="";
int i;
for (i = 0; i < len; i++)
{
    /* Print hyphen every two bytes */
    if (i % 1 == 0 && i > 0)
    {
        printf("-");
        strcat("-",strData);
    }
    /* Print one byte at a time */
    if (little_endian)
    {
        printf("%04X", (((epc[i] & 0xFF00) >> 8) | ((epc[i] & 0xFF) << 8)));
        strcat(("%04X", (((epc[i] & 0xFF00) >> 8) | ((epc[i] & 0xFF) << 8))),strData);
    }
    else
    {
        strcat(("%04X", epc[i]),strData);
        printf("%04X", epc[i]);
    }
}
printf("\n");
return strData;
}

如果我做错了,那么如何才能将这些值打印到变量中?

2 个答案:

答案 0 :(得分:2)

 strcat("-",strData);

strcat将第二个字符串附加到第一个字符串。

在这里,您尝试修改字符串文字"-",这是常量。也许您想将-添加到strData,然后它应该是strcat的第一个参数。

并且您已将strData声明为 -

char * strData="";

它也是一个字符串文字。所以你需要这样做,你将会修改其内容 -

char * strData;
strData=malloc(len);                // any desired length 

答案 1 :(得分:2)

结合其他人的建议,你的功能应该是:

char* ipj_util_print_epc(uint16_t* epc, int len, bool little_endian)
{
    char *strData = malloc(len*4+(len+1)/2+1);  // 4 chars per uint16, hyphens and terminating \0
    int i;
    char *bufp= strData;
    strData[0]= '\0';
    for (i = 0; i < len; i++)
    {
        /* Print hyphen every two bytes */
        if (i % 2 == 0 && i > 0)
        {
            printf("-");
            strcat(bufp,"-");
            bufp++;
        }
        /* Print one byte at a time */
        if (little_endian)
        {
            printf("%04X", (((epc[i] & 0xFF00) >> 8) | ((epc[i] & 0xFF) << 8)));
            bufp += sprintf(bufp,"%04X", (((epc[i] & 0xFF00) >> 8) | ((epc[i] & 0xFF) << 8))));
        }
        else
        {
            bufp += sprintf(bufp,"%04X", epc[i]));
            printf("%04X", epc[i]);
        }
    }
    printf("\n");
    return strData;
}