#include <stdio.h>
struct p
{
char *name;
struct p *next;
};
struct p *ptrary[10];
int main()
{
struct p p, q;
p.name = "xyz";
p.next = NULL;
ptrary[0] = &p;
strcpy(q.name, p.name);
ptrary[1] = &q;
printf("%s\n", ptrary[1]->name);
return 0;
}
该程序在执行时给出了分段错误。 这有什么不对?我是否需要为ptrary分配内存?
答案 0 :(得分:1)
在使用之前你必须分配一些内存。
q.name = malloc(10);
strcpy(q.name, p.name);
编辑:正确地通过展开指出,sizeof
char
将始终为1.因此从malloc
移除。
答案 1 :(得分:1)
在使用strcpy()
之前,您需要为字符串分配空间。您正在尝试将新字符串复制到内存中,该内存中包含从字符串文字初始化的字符串,这完全无效。这些字符串应该被认为是只读的。
您可以通过复制指针来避免此问题,然后指针将复制由字符串文字创建的字符串:
q.name = p.name;
答案 2 :(得分:0)
struct p
{
char *name; //name points nowhere
struct p *next;
};
strcpy(q.name, p.name); // q.name is any arbitrary value
在使用前为name
分配内存。
或声明为:
struct p
{
char name[4]; //the number of characters you require
struct p *next;
};
答案 3 :(得分:0)
#include <stdio.h>
struct p
{
char name[10];
struct p *next;
};
struct p *ptrary[10];
int main()
{
struct p p, q;
strcpy(p.name , "xyz");
p.next = NULL;
ptrary[0] = &p;
strcpy(q.name, p.name);
ptrary[1] = &q;
printf("%s\n", ptrary[1]->name);
return 0;
}
或者您可以使用p.name = malloc(sizeof(char)*10);