Почему возникает проблема с указателем в C?
Тип первого параметра у printf является char*, в итоге строка разыменовывается внутри printf при печати и парсинге шаблонов. Попытка передать *teststring вызывает передачу значения строки, имплицитно преобразованного в указатель, в итоге printf пытается разыменовать 4 символа строки и с закономерным результатом получает AV (access violation, 0xC0000005, segmentation fault core dumped и другие названия).
Поздравляю с успешным выстрелом себе в ногу. :)
testString это адрес буквы "q" в вашей строке(что-то типа 0х0A1F), *testString это переменная типа char, т.е. ASCII код.
Ты передаешь в функцию, которая ожидает адрес, букву "q" которая имеет аски код, который в свою очередь распознается как адрес и разыменовывается и скорее всего он ссылается на системную память от того и падает.