#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char compliance[256] = {'\0'};
if(compliance == NULL)
{
printf("compliance is null \n");
return 0;
}
printf("length of compliance %zd \n",strlen(compliance));
return 0;
}
输出:
length of compliance 0
int main(int argc, char *argv[])
{
char compliance[256] = {'\0'};
memset(compliance,0,256);
if(compliance == NULL)
{
printf("compliance is null \n");
return 0;
}
printf("length of compliance %zd \n",strlen(compliance));
return 0;
}
输出
符合性长度0
正如你们中的许多人所指出的,我想使用memset(而不是memcpy),但仍然不明白为什么在第二个程序中合规性不为空?或者换句话说,我如何使其无效?
最佳答案
两个程序都坏了;
if(compliance == NULL)
合规性永远不为空(它是堆栈上的变量)没有意义
第二部分
memcpy(compliance,0,256);
从源地址0(空)复制,这会在大多数平台上导致segfult。您可能想在这里使用
memset