Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 哪一个先去'\0';或零内存_C++_Visual Studio 2015 - Fatal编程技术网

C++ 哪一个先去'\0';或零内存

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

我有以下警告:

警告C6054:字符串cadAddress不能以零结尾

如果我加上这个

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