-1

我对 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]);
4

3 回答 3

2

您必须为char* rootdir.

例子:

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

之后你可以这样做:

strcpy(bb_data->rootdir, argv[argc-2]);
于 2013-04-12T17:05:44.153 回答
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]);
于 2013-04-12T17:32:19.587 回答
1

您需要为rootdir. 估计你要复制多少个字符,你可以mallocrootdir:

确保argv足够大以使用argc-2. 这也可能导致崩溃。

bb_data->rootdir = malloc(strlen(argv[argc-2]+1)); 
于 2013-04-12T17:13:25.230 回答