【发布时间】:2019-06-07 19:37:12
【问题描述】:
我必须做一个练习,我有这个结构:
typedef struct {
char *str;
unsigned int len;
} String;
我的任务是编写一个字符串 Concat,它将 "Kartoffel" 和 "puffer" 连接到 "Kartoffelpuffer"(土豆饼)。
String concat(String l, String r)
字符串l 和r 在运行函数后不应更改。
首先,我在 main 中创建了两个字符串:
String1 *l = malloc(sizeof(String1));
String1 *r = malloc(sizeof(String1));
(*l).str = malloc(sizeof("Kartoffel"));
(*r).str = malloc(sizeof("puffer"));
(*l).str = "Kartoffel";
(*r).str = "puffer";
(*l).len = 9;
(*r).len = 6;
然后我写了concat函数:
String1 concat(String1 l, String1 r) {
unsigned int i = 0;
String1 *newStr = malloc(sizeof(String1));
/* +1 for '\0' at the end */
newStr->str = malloc(l.len + r.len + 1);
newStr->str = l.str;
/* The following line is not working */
newStr->str[l.len] = *r.str;
newStr->len = l.len + r.len;
return *newStr;
}
我试图做的是使用指针算术。
当有一个指针指向像char *str这样的存储区域的开头时,应该可以用a[b]或*((a) + (b))移动指针对吧?当我运行代码时,我得到分段错误(我希望它是正确的翻译。原文:"Speicherzugriffsfehler")。
如果有人能给我一个提示,我将不胜感激。 PS:对不起我的英语。
【问题讨论】:
-
所以我还需要写一个从一个存储区复制到另一个存储区的函数?
-
return *newStr;也会泄漏内存。
标签: c string pointers malloc concat