C中strncpy的总线错误

C中strncpy的总线错误,c,substring,c-strings,strncpy,bus-error,C,Substring,C Strings,Strncpy,Bus Error,我正在处理与此相同的项目,但使用的typedef略有不同: typedef struct { char* word; int index; } data_t; typedef struct node node_t; typedef node { void *data; node_t *left; node_t *right; } 我试图将字符串拆分为单个单词,将其粘贴到数据结构中,然后将其插入到二叉搜索树中。其思想是,当在输入字符串之间循环时,当发现

我正在处理与此相同的项目,但使用的typedef略有不同:

typedef struct {
    char* word;
    int index;
} data_t;

typedef struct node node_t;

typedef node {
    void *data;
    node_t *left;
    node_t *right;
}
我试图将字符串拆分为单个单词,将其粘贴到数据结构中,然后将其插入到二叉搜索树中。其思想是,当在输入字符串之间循环时,当发现该字符是一个标记单词结尾的字符时,单词开头和结尾之间的字符数将复制到字符串中,我尝试使用以下方法:

strncpy(newstring, (in+wordstart), (i-wordstart));
其中:

char* newstring, in;
int i, wordstart;
但是,gcc在调用该特定行时会给出一个总线错误。如何修复此总线错误并保持当前解决方案,或者寻找不同的解决方案更明智


到目前为止,我唯一能想到的想法是,每次一个字符,将字符放入字符串中,直到到达单词的结尾。

这并没有声明两个指针,这只是一个指针和一个字符

char* newstring, in;
应该这样宣布:

char *newstring, *in;

另外,正如其他人指出的,您似乎没有为这些指针分配任何内存。

这并没有声明两个指针,这只是一个指针和一个字符

char* newstring, in;
应该这样宣布:

char *newstring, *in;
另外,正如其他人指出的,您似乎没有为这些指针分配任何内存。

这:

typedef node {
    void *data;
    node_t *left;
    node_t *right;
}
没有任何意义。在
节点
之前没有
结构
关键字,在
}
之后没有您试图引入的类型别名的名称,也没有终止分号。这不应该编译。

这:

typedef node {
    void *data;
    node_t *left;
    node_t *right;
}

没有任何意义。在
节点
之前没有
结构
关键字,在
}
之后没有您试图引入的类型别名的名称,也没有终止分号。这不应该编译。

您需要发布更多的代码。您如何为所有这些字符串分配内存?中的char*newstring只是指向一些随机内存的指针。你确实需要让它们指向一些有效的内存,内存属于进程。是的,内存根本没有被分配。粘贴在
newstring=malloc(strlen(in)-wordstart)似乎使它起作用。考虑分配<代码> +1 < /COD>字符来存储0终止符。@不满意的人你需要发布更多的代码。你是如何为所有这些字符串分配内存的?
char*newstring,in
只是指向一些随机内存的指针。你确实需要让它们指向一些有效的内存,内存属于进程。是的,内存根本没有被分配。粘贴在
newstring=malloc(strlen(in)-wordstart)似乎使它起作用。考虑分配<代码> +1 < /COD>字符来存储0终止符。@心怀不满的人真是太棒了!还有一个很好的例子,为什么总是在自己的行上声明变量!;-)哈哈,这一点很好,谢谢你指出!老实说,我把它放在那里是为了说明strncpy行是如何定义类型的。in通过
char*in
传递给函数,尽管
newstring
声明如上。对此表示歉意,不过我会记住你的观点:)接得好!还有一个很好的例子,为什么总是在自己的行上声明变量!;-)哈哈,这一点很好,谢谢你指出!老实说,我把它放在那里是为了说明strncpy行是如何定义类型的。in通过
char*in
传递给函数,尽管
newstring
声明如上。对此表示歉意,不过我会记住你的观点:)