#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

10-08 06:21