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