C中strncpy的总线错误
我正在处理与此相同的项目,但使用的typedef略有不同: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 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
声明如上。对此表示歉意,不过我会记住你的观点:)