Новости Crash Me #1

optio
, 31 August 2008

На просторах интернетов нашел несколько небольших задачек на понимание языка C и архитектуры IA32. Идея мне понравилась, посему предлагаю придумывать/находить подобные головоломки. Язык и окружение роли не играют, важны только простота задачи и загруженность мозга.

Собственно первая задача:

Нужно уронить данную программу и объяснить почему это удалось сделать. Настоятельно рекомендую сначала самостоятельно решить задачу и только потом смотреть комментарии.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
	if (argc != 4) {
		fprintf(stderr, "DIAF\n");
		return EXIT_FAILURE;
	}
	char c[3];
	unsigned i;
	for (i = 0; i < sizeof(c); i++)
		c[i] = atoi(argv[i + 1]);
	if (c[0] + c[1] + c[2] == 0) {
		fprintf(stderr, "No no\n");
		return EXIT_FAILURE;
	}
	c[1] += c[0] + c[2];
	printf("%d\n", c[0]/c[1]);
	return EXIT_SUCCESS;
}

P.S. Найдено на Fernando J. Pereda’s blag