gpt4 book ai didi

无法理解为什么我会因为 strncpy 而出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:02 26 4
gpt4 key购买 nike

当我使用 strncpy 时出现段错误,我不知道如何修复它。

这是我的 rectangle.h 文件。这只是一个头文件。

#define NAMESIZE 20

struct point {
int x;
int y;
};

struct rectangle {
struct point upperleft;
struct point lowerright;
//char label[NAMESIZE + 1];
char *label;
};

struct point *create_point(int x, int y);

struct rectangle *create_rectangle(struct point ul, struct point lr,
char *label);

int area1(struct rectangle r);
int area2(struct rectangle *r);
void change_label(struct rectangle *r, char *newlabel);
void broken_change_label(struct rectangle r, char * newlabel);
void print_rectangle(struct rectangle *r);

这是我的 rectangle.c 文件。我只想展示其中的一个功能:

/* create_rectangle动态分配内存存放一个矩形,给它 * 初始值,并返回指向新创建的矩形的指针。 */

struct rectangle *create_rectangle(struct point ul, struct point lr, 
char *label) {

struct rectangle *r = malloc(sizeof(struct rectangle));
/* TASK 1: fill in the rest of this function */
r->upperleft = ul;
r->lowerright = lr;
r->label = malloc(strlen(label) * sizeof(char));
strncpy(r->label, label, strlen(label) + 1);

return r;
}

在上面的代码中,我使用malloc为标签指针分配了足够的空间。

当我运行下面的 tester.c 程序时,出现段错误(由于 strncpy)。

int main(void) {    

char *str1 = "Big rectangle";
char *str2 = "Square";

struct point *p1 = create_point(10, 10);
struct point *p2 = create_point(100, 100);

struct rectangle *r1 = create_rectangle(*p1, *p2, str1);
print_rectangle(r1);
printf(" expecting: (10, 10) (100, 100) Big rectangle\n");

free(p2);
p2 = create_point(20, 20);

struct rectangle r2;

strncpy(r2.label, str2, NAMESIZE); //GETTING SEGMENTATION FAULT DUE TO THIS LINE
}

我怀疑我遇到了段错误,因为我直接在 r2.label 上执行 strncpy。我怀疑是因为我没有为矩形结构中的 char *label 分配任何空间,这就是我收到段错误的原因。但是当我写

char *label = malloc(sizeof(NAMESIZE) * sizeof(char));

我得到一个错误:

error: expected ';' at end of declaration list` error.

最佳答案

strncpy(r2.label, str2, NAMESIZE);

您正在尝试写入 r2.label,这是一个尚未分配任何空间的指针。

请注意您分配空间的代码:

r->label = malloc(strlen(label) * sizeof(char));

strlen(label) 是不够的,一个字符串需要以 null 结尾。

关于无法理解为什么我会因为 strncpy 而出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com