哪一个先走? '\ 0'或ZeroMemory

时间:2017-03-09 05:24:19

标签: c++ visual-studio-2015

只是一个简单的问题,我有这个警告:

警告C6054:字符串cAddress可能不是以零结尾

bool GSC::bIsValidIPAdd(char *cIPAdd)
{
...........
...........
...........
    ZeroMemory(cAddress, sizeof(cAddress));
    memcpy(cAddress, cIPAdd, strlen(cIPAdd));
    szLength = strlen(cAddress);             //warning here
...........
...........
...........
...........
}

如果我添加此

cAddress[0] = '\0';
在ZeroMemory上面,警告已经解决......

但......代码的哪一部分首先应被剔除? ZeroMemory或'\ 0'?

谢谢你!

1 个答案:

答案 0 :(得分:-1)

问题来自于使用带有字符串的memcpy。您应该依赖strcpy,因为它将为您终止。

根据您声明cAddress的方式,还存在潜在的问题。

char cAddress[10];
printf("%d\n", sizeof(cAddress));

char* cAddress = "test";
printf("%d\n", sizeof(cAddress));

首先打印10,但第二个打印8(或4,如果你是在32位平台上)。