Во-первых, никогда не разыгрывайте malloc
, как в вашем коде. Одна из ошибок, которые я вижу в вашем коде:
char *result = (char*)malloc(sizeof(char)*n*n*n*n);
Если n
большой, то размер result
очень очень велик.
Вы можете использовать sprintf
чтобы сначала преобразовать n
в строку, затем вы можете вычислить длину результата, умножив n
на длину строки n
(+ 1 для нулевого символа):
char str[20];
sprintf(str, "%d", n);
// allocate for result
char * result = malloc(n*strlen(str) +1);
Завершить программа для теста:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * pattern(int n)
{
char str[20];
sprintf(str, "%d", n);
char * result = malloc(n*strlen(str) +1);
if (!result)
return NULL;
for(int i = 1; i <= n; i++) {
strcat(result, str);
}
//printf("%s", result);
return result;
}
void print_pattern(int n) {
for (int i = 1; i <= n; ++i)
{
char * result = pattern(i);
printf("%s\n", result);
free(result);
}
}
int main(int argc, char const *argv[])
{
print_pattern(10);
return 0;
}
Результат:
1
22
333
4444
55555
666666
7777777
88888888
999999999
10101010101010101010