Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 结构程序中的错误-分段错误_C - Fatal编程技术网

C 结构程序中的错误-分段错误

C 结构程序中的错误-分段错误,c,C,程序在执行时出现分段错误。 这里怎么了?我需要分配内存吗?在使用之前,您必须分配一些内存 #include <stdio.h> struct p { char *name; struct p *next; }; struct p *ptrary[10]; int main() { struct p p, q; p.name = "xyz";

程序在执行时出现分段错误。
这里怎么了?我需要分配内存吗?

在使用之前,您必须分配一些内存

    #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;
    }

编辑:正如通过“展开”正确指出的那样,sizeof char将始终为1。因此,在使用strcpy之前,需要为字符串分配空间。您正试图将一个新字符串复制到内存中,该内存中包含一个从字符串文本初始化的字符串,这是完全无效的。此类字符串应视为只读

您可以通过复制指针来避免此问题,指针将复制由字符串文字创建的字符串:

q.name = malloc(10);
strcpy(q.name, p.name);
strcpyq.name,p.name;//q、 名称是任意值

在使用名称之前为其分配内存

    #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;
    }
或声明为:

struct p
{
    char *name;  //name points nowhere
    struct p *next;
};

或者您可以使用p.name=mallocsizeofchar*10

感谢为q分配内存。名称beofre strcpy解决了这个问题。请不要按字符大小缩放分配,这总是1,只会增加混乱。@请指出,请解开。删除sizeof并添加解释。
struct p
{
    char name[4];  //the number of characters you require
    struct p *next;
};
#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;
    }