Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Pomoc s programem v C

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;
}

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny