Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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中memset的用途是什么_C_Memset - Fatal编程技术网

C中memset的用途是什么

C中memset的用途是什么,c,memset,C,Memset,我正在阅读源代码,无法理解以下语句的目的: /*********************************************************************** ** */ int main(int argc, char **argv) /* ***********************************************************************/ { char *cmd; // Parse command l

我正在阅读源代码,无法理解以下语句的目的:

/***********************************************************************
**
*/  int main(int argc, char **argv)
/*
***********************************************************************/
{
    char *cmd;

    // Parse command line arguments. Done early. May affect REBOL boot.
    Parse_Args(argc, argv, &Main_Args);

    Print_Str("REBOL 3.0\n");

    REBOL_Init(&Main_Args);

    // Evaluate user input:
    while (TRUE) {
        cmd = Prompt_User();
        REBOL_Do_String(cmd);
        if (!IS_UNSET(DS_TOP)) {
            //if (DSP > 0) {
                if (!IS_ERROR(DS_TOP)) {
                    Prin("== ");
                    Print_Value(DS_TOP, 0, TRUE);
                } else
                    Print_Value(DS_TOP, 0, FALSE);
            //}
        }
        //DS_DROP; // result
    }

    return 0;
}
在Parse_Args函数中:

/***********************************************************************
**
*/  void Parse_Args(int argc, REBCHR **argv, REBARGS *rargs)
/*
**      Parse REBOL's command line arguments, setting options
**      and values in the provided args structure.
**
***********************************************************************/
{
    REBCHR *arg;
    REBCHR *args = 0; // holds trailing args
    int flag;
    int i;

    CLEARS(rargs);

    ....
而CLEARS的定义是:

#define CLEARS(m)       memset((void*)(m), 0, sizeof(*m));

所以我的问题是为什么这里使用
memset

看起来
rargs
是一种包含程序选项的结构
CLEARS()
memset()
用于用零值填充该结构以启动它。

看起来
rargs
是一种包含程序选项的结构
CLEARS()
memset()
用于用零值填充该结构以启动它。

memset将内存块设置为给定值。
它通常是用手工优化的汇编语言编写的,预计速度会非常快。

memset将内存块设置为给定值。
它通常是用手工优化程序集编写的,预计速度会非常快。

请阅读更多有关它的内容。顺便说一句:不需要强制转换,sizeof可能不符合您在此处的意图。您应该注意,在声明和
之间的某个地方清除了
“调用”,必须分配
args
结构。你们两个到底在说什么?清除*rargs处的重RGS为零。。。sizeof是正确的,args是不相关的。请阅读更多关于它的内容。顺便说一句:不需要强制转换,sizeof可能不符合您在这里的意图。您应该注意,在声明和
清除
调用之间的某个地方,必须分配
args
结构。你们到底在说什么?清除*rargs处的重RGS为零。。。sizeof是正确的,args是无关的。