Nie je ošetrené pretečenie pri zapisovaní do výstupného reťazca:
#include <stdio.h>
#include <string.h>
#define MAX 4096
int main(int argc, char* argv[])
{
char input[MAX], output[MAX];
int n, cnt = 0, i;
char *in = input, *out = output, *end;
printf("Zadajte retazec: ");
fgets(input, MAX, stdin);
printf("Zadajte cislo 1-9: ");
while (scanf("%d", &n) != 1);
end = in + strlen(input);
while (in <= end) {
if (*in >= '0' && *in <= '9') {
cnt += cnt * 10 + *in++ - '0';
continue;
}
if (cnt) {
if (in <= end - n) {
while (--cnt > 0)
for (i = 0; i < n; ++i)
*out++ = *(in + i);
} else {
out += sprintf(out, "%d", cnt);
cnt = 0;
}
}
*out++ = *in++;
}
puts(output);
return 0;
}