Ошибка проверки времени выполнения № 2 - стек вокруг переменной поврежден

Мы уже видели некоторые вопросы здесь в stackoverflow, но ни один из них не решил мою проблему ...

у меня есть этот код в C:

#include 
#include 

int main ()
{
    char str[] = "";
    scanf("%[^\n]", str);
    printf("Você digitou: %s\n", str);
    system("pause");
}

Когда я запускаю программу, у меня была ошибка:

Ошибка проверки времени выполнения # 2 - стек вокруг переменной 'ул» был поврежден.

теперь я действительно нене знаю, что яя не так делаю ... :(

Ответы на вопрос(4)

Этот ответ предназначен для всех, кто пришел на C ++ из Java / C # или другого современного объектно-ориентированного языка.

Для меня эта проблема произошла по следующей причине:

Я создал свой собственный класс C ++.

MyClass.h

class MyClass {

public:
    void work();

};

MyClass.cpp

#include "MyClass.h"
#include 

class MyClass{
    int64 propA, propB;

    public:
        void work();

};

void MyClass::work() {
    // some work that uses propA and propB
}

Моя интуиция заключалась в том, чтоpropA а такжеpropB будут просто частными свойствами, невидимыми из кода вне этого класса.

Проблема оказалась в том, что у меня нетт поставитьpropA а такжеpropB вMyClass.h, Компилятор не делаетне знаю, сколько памяти должно выделяться, когдаMyClass становится экземплярами вызывающих.

Я просто добавил свойства в шапку:MyClass.h

MyClass.h (исправлено)

class MyClass {
    int64 propA, propB;

public:
    void work();

};

Вы не должны перезаписывать константу с помощью пользовательского ввода. замещатьchar str[] = "" сchar * str = malloc(

Решение Вопроса

Массивstr может содержать только одинchar учитывая его инициализацию. Призыв кscanf() будет переписывать границыstr вызывая неопределенное поведение, в этом случае повреждение стека. Вы должны решить, насколько большойstr массив должен быть и ограничивать количество читаемых символов, чтобы предотвратить переполнение буфера.

Использоватьscanf() Вы указываете максимальное количество символов для чтения:

char str[1024];
if (1 == scanf("%1023[^\n]", str)) /* Check return value to ensure */
{                                  /* 'str' populated.             */
}                                  /* Specify one less than 'str'  */
                                   /* size to leave space for null.*/

Вы также можете использоватьfgets() но потом нужно будет удалить символ новой строки.

Вы'Выделите только один байт для хранения ввода. Линия

char str[] = "";

Выделяет ноль байтов для содержимого строки и один байт для его нулевого терминатора. Вместо этого сделайте что-то вроде

char str[100];

Или какой бы ни была максимальная длина ввода.

Ваш ответ на вопрос