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

问题描述 投票:1回答:2

我正在使用命令行参数,并将其复制到字符指针。但它给了我一个错误。

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

这给了我

Segmentation fault (core dumped)
c
2个回答
1
投票

您没有在要复制表达式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;
}

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 yes运行时的输出是yes

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

© www.soinside.com 2019 - 2024. All rights reserved.