В вашем исходном коде, без особой обработки, возможно, самый простой способ - это:
#define HI "hello world"
char str[] = HI " " HI " " HI;
Это объявит строку запрошенного значения:
"hello world hello world hello world"
Если вы хотите код , который это сделает, вы можете использовать что-то вроде:
char *repeatStr (char *str, size_t count) {
if (count == 0) return NULL;
char *ret = malloc (strlen (str) * count + count);
if (ret == NULL) return NULL;
strcpy (ret, str);
while (--count > 0) {
strcat (ret, " ");
strcat (ret, str);
}
return ret;
}
Теперь имейте в виду, что это можно сделать более эффективным - несколько операций strcat
созрели для оптимизации, чтобы избежать обработкиданные снова и снова (a) .Но это должно быть достаточно хорошим началом.
Вы также несете ответственность за освобождение памяти, возвращаемой этой функцией.
(a) Например, с:
// Like strcat but returns location of the null terminator
// so that the next myStrCat is more efficient.
char *myStrCat (char *s, char *a) {
while (*s != '\0') s++;
while (*a != '\0') *s++ = *a++;
*s = '\0';
return s;
}
char *repeatStr (char *str, size_t count) {
if (count == 0) return NULL;
char *ret = malloc (strlen (str) * count + count);
if (ret == NULL) return NULL;
*ret = '\0';
char *tmp = myStrCat (ret, str);
while (--count > 0) {
tmp = myStrCat (tmp, " ");
tmp = myStrCat (tmp, str);
}
return ret;
}