char *data = malloc(200);
data=getenv("QUERY_STRING");
Утечка памяти здесь. Вы выделяете 200 байтов, которые никогда не будете использовать или не сможете free()
. (Или нет, поскольку malloc()
может завершиться с ошибкой и вернуть NULL
.)
char m[200];
sscanf(data,"%s", m);
Это грубая замена для strcpy()
/ strncpy()
. Результатом является переполнение буфера, если длина строки запроса превышает 200 символов. Также завершается, как только он находит пробелы, но это не проблема, потому что они были превращены в +
или %20
во время кодирования URL.
ptr=fopen("c:/test.txt", "w");
fprintf(ptr, "%s", m);
fopen()
может завершиться ошибкой, в результате чего возвращается значение NULL
.
Я предлагаю вам ознакомиться с указателями и распределением памяти, посмотреть некоторые функции манипуляции со строками, отличные от printf / scanf, а также выработать привычку проверять наличие ошибок, то есть защищаться от кодирования. Даже в небольшом, качественном коде.