麻烦strcpy

时间:2013-04-12 17:01:37

标签: c strcpy

我对C很糟糕,并且遇到strcpy问题。我正在尝试获取其中一个函数参数并将其存储在char数组中。当我运行它时,我得到了一个分段错误,但我不明白为什么。我究竟做错了什么?谢谢!

struct bb_state {
    FILE *logfile;
    char *rootdir;
};

struct bb_state *bb_data;
bb_data = malloc(sizeof(struct bb_state));
strcpy(bb_data->rootdir, argv[argc-2]);

3 个答案:

答案 0 :(得分:2)

您必须为char* rootdir分配内存。

示例:

int len=strlen(argv[argc-2])+1;
bb_data->rootdir=malloc(len);

然后你可以这样做:

strcpy(bb_data->rootdir, argv[argc-2]);

答案 1 :(得分:1)

您需要为rootdir分配空间。估算您要复制的字符数,然后为malloc执行另一个rootdir

确保argv足够大,可以使用argc-2编制索引。这也可能导致崩溃。

bb_data->rootdir = malloc(strlen(argv[argc-2]+1)); 

答案 2 :(得分:1)

  

我正在尝试获取其中一个函数参数,将其存储在char数组中

您的代码存在的问题是您没有用于存储复制参数的字符数组。你有一个指针。您必须分配用于复制参数的存储空间。或者,您可以使rootdir成为数组而不是指针,但您必须小心防止副本溢出固定大小的数组。

分配存储空间

bb_data->rootdir = malloc(strlen(argv[argc - 2]) + 1); // +1 is for the NULL

将rootdir设为数组

#include <limits.h>
#include <stddef.h>
#include <stdlib.h>

...

    struct bb_state {
        FILE *logfile;
        char  rootdir [PATH_MAX];
    };

    struct bb_state *bb_data;
    size_t           len;
    len = strlen(argv[argc - 2]);
    if (len >= PATH_MAX) {
        // Argument is too long.
        fprintf(stderr, "Argument is too long: %s\n", argv[argc - 2]);
        return EXIT_FAILURE;
    }
    bb_data = malloc(sizeof(struct bb_state));
    strcpy(bb_data->rootdir, argv[argc - 2]);