2015-05-01 5 views
-4

Я хочу ввести две строки в разных ячейках памяти, но после ввода первого ввода отобразится сообщение об ошибке «segmentation fault (core dumped)». Я не понимаю, что не так с этим кодом.Почему он дает ошибку "segmentation fault"?

#include <stdio.h> 
#include<iostream> 
using namespace std; 

int main() 
{ 
    char *str; 
    int i; 
    scanf("%s",str+0); 
    scanf("%s",str+1); 
    return 0; 
} 

Но когда я беру только один вход, он отлично работает.

#include <stdio.h> 
#include<iostream> 
using namespace std; 

int main() 
{ 
    char *str; 
    int i; 
    scanf("%s",str+0); 

    return 0; 
} 

Почему?

+3

Почему у вас '#include ' и 'using namespace std;'? Они используются в C++, а не C. –

+0

«* Но когда я беру только один вход, он отлично работает. *« Оба кода демонстрируют неопределенное поведение. И UB означает, что все может случиться. Это может сработать, не может, или сделать что-то еще. Избегайте UB любой ценой. Не полагайтесь на это поведение. –

+0

Можете ли вы также показать свой ввод. –

ответ

6

Поскольку вы не выделяете какую-либо память str перед ее использованием в своем scanf().

Вам нужно выделить память с malloc()

Обе ваши коды демонстрируют Undefined Behavior, как вы пытаетесь получить доступ к небезопасным памяти.