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

Exception when trying to copy the data into a char pointer value

我是 C 的新手。我有这个打印语句,其中打印了特定的值。我需要将这个值复制到一个字符串中。但是当我尝试复制它时,出现了如下所示的异常。

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

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

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;
}

如果我做错了,那么我怎样才能得到打印到变量中的这些值?

 strcat("-",strData);

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

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

并且您还声明 strData 为 -

char * strData="";

它也是一个字符串字面量。所以你需要这样做,在那里你可以修改它的内容-

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

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

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 [=10=]
    int i;
    char *bufp= strData;
    strData[0]= '[=10=]';
    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;
}