usxr
@usxr

Что делать если при отладке сработала точка останова по исключению?

Исходный код
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <locale.h>

void get_str ( char *str )
{
	int i;
	char c = getchar ( );

	for ( i = 0; c != EOF && c != '\n'; i++ )
	{
		str[i] = c;
		c = getchar ( );

	}
	str[i] = '\0';
}


int main ( void )
{
	setlocale ( LC_ALL, "RUSSIAN" );
	char str = 0, *pStr = &str;

	get_str ( pStr );

	for ( int i = 0; pStr[i] != '\0'; i++ )
	{
		printf ( "\n->%c", pStr[i] );

	}

	free ( pStr );

	return 0;
}

Цель программы: записать строку с использованием указателей (имитация gets).

Комментарий: в visual studio 2019 при отладке выскакивает точка останова без какой либо информации (все введенные символы выводятся). На 2х других Онлайн компиляторах выскакивает проблема по типу "free(): invalid pointer" и не выводится последний введенный символ, либо проблемы не видят и обрабатывают так, чтоб мой кривой код хоть как то работал.
Попросту копировать реализацию gets я не желаю, поскольку полностью осознать его я пока не могу.

Вопрос: Подскажите глупому, где же он допустил ошибки?
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
char str = 0, *pStr = &str;

Очень, очень не правильно так делать. Строка - это массив char в памяти. Указатель указывает на начало этого куска в пямяти. Вы же берете одну переменную, и потом работаете с ней как с массивом.

Надо выделять память под строку. Или статический массив, или malloc.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы