Я должен выполнить упражнение, и мне дана такая структура:
typedef struct {
char *str;
unsigned int len;
} String;
Моя задача - написать Concat String, который объединяет "Kartoffel"
и "puffer"
в "Kartoffelpuffer"
(картофельные оладьи).
String concat(String l, String r)
Обе строки l
и r
не должны изменяться после запуска функции.
Сначала я создал две строки в основном:
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: простите за мой английский.