2012-10-23 61 views
0

我在同一个项目但一个稍微不同的typedef工作作为本question,:总线错误使用C函数strncpy

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

typedef struct node node_t; 

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

我试图将一个字符串分解成单个的词,它坚持到data_t结构,然后将其插入到二叉搜索树中。这个想法是,当在输入字符串中循环时,当发现字符是标记字的结尾的字符时,字的开始和结束之间的字符数被复制到字符串中,试图用做:

strncpy(newstring, (in+wordstart), (i-wordstart)); 

其中:

char* newstring, in; 
int i, wordstart; 

然而,GCC提供了一个总线错误时特定的行被调用。如何解决这种总线错误并保留当前的解决方案,或者寻找其他解决方案会更明智一些?

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

+0

你需要发布更多的代码。 –

+0

你如何为所有这些字符串分配内存? – Mat

+0

'char * newstring,in'只是指向一些随机存储器的指针。你需要让它们指向一些有效的内存,属于该进程的内存。 – alk

回答

3

这不申报两个指针,这只是一个指针和一个char

char* newstring, in; 

应该声明如下:

char *newstring, *in; 

此外,如别人注意,这不是你似乎没有为这些指针分配任何内存。

+1

好抓!还有一个很好的例子,为什么总是在自己的行上声明一个变量! ;-) – alk

+0

哈哈非常好点,并感谢您指出!老实说,我把它放在那里,以指示如何定义strncpy行。 in通过'char * in'传递给函数,尽管'newstring'声明如上。虽然我会牢记你的观点:) – disgruntledperson

1

此:

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

没有任何意义可言。在node之前没有struct关键字,并且在}之后没有您想要引入的类别别名,也没有终止分号。这不应该编译。