Я пытаюсь создать функцию guilabel_wrap(char *buffer, int maxlen)
, которая принимает указатель на строку и длину, а затем изменяет строку для вставки \ n, чтобы длина строки никогда не превышала, например
char* guilabel = "Hello, world! How are you doing?";
guilabel_wrap(guilabel, 15);
printf("%s", guilabel);
напечатает
Hello, world!
How are you
doing?
Я придумал функцию ниже, которая компилируется с gcc, но приводит к ошибке сегментации.Я подозреваю, что проблема связана со вторым циклом while и с ошибкой моего понимания указателей.
void guilabel_wrap(char* buffer, int maxlen) {
char *pos;
char *end;
pos = buffer;
end = (pos + strlen(buffer));
while ((end - pos) > maxlen) {
pos += maxlen;
while (isspace(*pos)) {
--pos;
if (pos < buffer)
return;
}
*pos = '\n';
}
}
edit: я вызываю эту функцию, используя аргумент другой функции.Это выглядит так:
dia_yesno("Hello, world! How are you doing today? I'm doing well");
, который объявлен как bool dia_yesno(char* guilabel)
.Затем в dia_yesno()
я звоню guilabel_wrap(guilabel, 15)
, как описано выше.