我正在尝试用C编程语言开发一个简单的基于行的文本编辑器,因为我认为这将是一个小项目,同时也很有趣。但是,为了使编辑器行基于,我首先必须将用户正在编辑的文件从缓冲区转换为链接列表,使用' \ n'作为一个划界人物。但是,尝试将指向字符串的字符分配给我的节点结构情况下会出现分段错误。以下是该函数的代码:
35 void strlink(line_t *dest, char *src)
36 {
37 size_t i = 0;
38 size_t bufpos = 0;
39 line_t *current = dest;
40
41 current = malloc(sizeof(line_t));
42 current->linebuf = (char *) malloc(8192);
43
44 while(src[i] != EOF) {
45 while(src[i] != '\n') {
46 current->linebuf[bufpos] = src[i];
47 bufpos++;
48 }
49 bufpos = 0;
50 current->nextline = malloc(sizeof(line_t));
51 current->linebuf = malloc(8192);
52 current = current->nextline;
53 i++;
54 }
55
56 current->nextline->nextline = NULL;
57 }
最初,我做了一些不同的事情。首先,我分配到current->nextline->linebuf
而不是current->linebuf
,因为我认为你必须为缓冲区分配下一行。我还将字符串存储在结构中,静态长度为8192.更改它根本没有帮助。在我从字符串中获取每个字符之后,我还习惯将行分配给我为结构实例分配内存的行,但是这会导致单独的分段错误,现在这个解决方案似乎适用于它。然而,真正的罪魁祸首是我尝试将字符串分配给字符串的行。我真的不知道为什么这不起作用。任何帮助将不胜感激!
(这是我的line_t结构)
6 typedef struct line {
7 char *linebuf;
8 struct line *nextline;
9 } line_t;