Форум программистов, компьютерный форум CyberForum.ru

В чем причина ошибки? - C++

Восстановить пароль Регистрация
 
bat_dmitry
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 22
15.11.2010, 22:03     В чем причина ошибки? #1
Код

C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    char arr[1][2];
 
    scanf("%s %s", &arr[0][0], &arr[1][0]);
 
    printf("%s\n\n", arr[0][0]);
 
    return 0;
}
Вызывает ошибку сегментирования в строке

C++
1
printf("%s\n\n", arr[0][0]);
Почему?

ввод свободный - два двухбуквенных слова, разделенных пробелом, например aa bb
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2010, 22:03     В чем причина ошибки?
Посмотрите здесь:

C++ причина ошибки
Незнаю в чем причина C++
В чем причина? C++
Не понятна причина ошибки C++
подскажите в чем причина.... C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
15.11.2010, 22:17     В чем причина ошибки? #2
C
1
2
3
4
5
6
7
8
9
10
int main()
{
    char arr[2][3]; // Про завершающий ноль не забывай..
 
    scanf("%s %s", arr[0], arr[1]); //"aa" -> {'a', 'a', 0}
 
    printf("%s\n\n", arr[0]);
 
    return 0;
}
bat_dmitry
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 22
15.11.2010, 22:23  [ТС]     В чем причина ошибки? #3
Немного уточню, я так понял двумерные массивы в С/С++ это "массив массивов", т.е. например масссив

C++
1
char arr[2][3];
это 2 элемента типа char, длинной по 3 символа или нет?
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
15.11.2010, 22:26     В чем причина ошибки? #4
Цитата Сообщение от bat_dmitry Посмотреть сообщение
это 2 элемента типа char, длинной по 3 символа или нет?
Да....
bat_dmitry
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 22
15.11.2010, 22:30  [ТС]     В чем причина ошибки? #5
Тогда передавая функции scanf адрес &arr[0][0], я жду, что программа заполнит массив так (вводим "aa"):

arr[0][0] = "a"
arr[0][1] = "a"
arr[0][2] = "\0"

соответственно второй аргумент в моем коде (вводим "bb")

&arr[1][0]

arr[1][0] = "b"
arr[1][1] = "b"
arr[1][2] = "\0"

где же тут нарушение сегментирования?
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
15.11.2010, 22:34     В чем причина ошибки? #6
У тебя изначально были кривые размеры массивов..
char arr[1][2];
Я потом исправил на char arr[2][3];
bat_dmitry
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 22
15.11.2010, 22:38  [ТС]     В чем причина ошибки? #7
Спасибо, друг, не увидел, а еще такой вопрос, если распечатать результат так

C++
1
printf("%s\n\n", arr[0]);
все будет нормально, но если так

C++
1
printf("%s\n\n", arr[0][0]);
снова ошибка сегментирования, почему?
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
15.11.2010, 22:41     В чем причина ошибки? #8
printf("%с\n\n", arr[0][0]); // Выведет один символ..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2010, 22:43     В чем причина ошибки?
Еще ссылки по теме:

C++ В чем причина
C++ В чем причина
В чем причина ошибки "error C2046: недопустимый вариант выбора"? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
bat_dmitry
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 22
15.11.2010, 22:43  [ТС]     В чем причина ошибки? #9
Спасибо!
Yandex
Объявления
15.11.2010, 22:43     В чем причина ошибки?
Ответ Создать тему
Опции темы

Текущее время: 20:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru