C++ 哪一个先去'\0';或零内存
我有以下警告: 警告C6054:字符串cadAddress不能以零结尾 如果我加上这个C++ 哪一个先去'\0';或零内存,c++,visual-studio-2015,C++,Visual Studio 2015,我有以下警告: 警告C6054:字符串cadAddress不能以零结尾 如果我加上这个 cAddress[0] = '\0'; 在零内存以上,警告已解决 但是。。。应该首先执行代码的哪一部分? ZeroMemory或“\0”?问题来自于对字符串使用memcpy。您应该改为依赖strcpy,因为它将为您null终止 根据您如何声明CadAddress,还有一个潜在的问题 char cAddress[10]; printf("%d\n", sizeof(cAddress)); char* cAd
cAddress[0] = '\0';
在零内存以上,警告已解决
但是。。。应该首先执行代码的哪一部分?
ZeroMemory或“\0”?问题来自于对字符串使用
memcpy
。您应该改为依赖strcpy,因为它将为您null终止
根据您如何声明CadAddress
,还有一个潜在的问题
char cAddress[10];
printf("%d\n", sizeof(cAddress));
char* cAddress = "test";
printf("%d\n", sizeof(cAddress));
第一个将打印10,但第二个将打印8(或4,如果您在32位平台上)。为什么要使用memcpy而不是strcpy或strncpy?考虑到您使用strlen获取长度,这似乎是一个奇怪的选择。您使用的分析器对ZeroMemory()一无所知。不管你把它放在哪里,它实际上也解决不了任何问题,它只是关闭了分析仪。您可以使用memset(),它可能会很高兴。或者使用strcpy,这里的逻辑选择,假设您接下来使用szLength来编写零终止符。这样做的习惯总是一样的。假设所有地址都确实有效,
cAddress
是静态分配的,因此sizeof(cAddress)
是有意义的,cIPAdd
以空结尾,如果strlen(cIPAdd)>=sizeof(cAddress)
,情况如何ZeroMemory
不会将CadAddress
界限之外的内存归零,也不会阻止memcpy
过满或完全满,从而写入零。您在这里所做的看起来并不安全,即使在其他地方您已经确保它是安全的,并且编译器有理由警告您;“我们没办法知道,”马丁洛佩兹说
char cAddress[10];
printf("%d\n", sizeof(cAddress));
char* cAddress = "test";
printf("%d\n", sizeof(cAddress));