无法将命令行参数复制到 C 中的字符指针

cannot copy command line argument to character pointer in C

我正在将命令行参数复制到我的字符指针。但它给我一个错误。

int main(int argc, char *argv[])
{
    char *cmdarg;
    if(argc>1)
            strcpy(cmdarg, argv[1]);
    else
            cmdarg = NULL;
    return 0;
}

这给了我

Segmentation fault (core dumped)

您没有在要复制表达式 argv[1].

指向的参数的位置分配内存

尝试以下方法

#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *cmdarg = NULL;

    if( argc > 1 )
    {
        cmdarg = malloc( strlen( argv[1] ) + 1 );
        if ( cmdarg != NULL ) strcpy( cmdarg, argv[1] );
    }

    // ...    Some other code

    free( cmdarg );

    return 0;
}

如果你只想存储指针的值argv[1]那么写

#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *cmdarg = NULL;

    if( argc > 1 )
    {
        cmdarg = argv[1];
    }

    // ...    Some other code

    return 0;
}

cmdarg 是声明的未初始化指针。我们必须为 cmdarg 指向分配动态内存。下面是示例代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *cmdarg;

    cmdarg = malloc( 5 * sizeof(char));
    if(argc>1)
    {
            strcpy(cmdarg, argv[1]);
            printf("%s\n", cmdarg);
    }
    else
            cmdarg = NULL;
    free(cmdarg);
    return 0;
}

当 运行 参数 ./a.out yesyes 时输出。

注意:使用 strcpy() 时分配的大小不应小于。确保使用 strncpy()