С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Access violation и размерность символьного массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с русским языком в консольном приложении http://www.cyberforum.ru/cpp-beginners/thread594625.html
Как можно осуществить ввод-вывод текста на русском языке в консоли? Просто я в программе использовал уже тексты в файлах на русском языке, ввел их там, все как положено(использовал еще...
C++ Нужно разобраться с программой В общем дана программа, мне нужно разобрать ее всю и полностью :) Нужно объяснить каждую строчку что за что отвечает и что делает, думаю для таких профи, как Вы это будет не трудно сделать, можете... http://www.cyberforum.ru/cpp-beginners/thread594624.html
C++ Сколько слов, состоящих только из прописных букв, содержится в сообщении
Всем привет.Есть такое вот задание: Подсчитать сколько слов, состоящих только из прописных букв, содержится в сообщении, и в каждом таком слове изменить все буквы на заглавные. if( OpenDialog1...
C++ Как записывать и считывать не POD типы данных из бинарного файла?
Есть класса в котором часть полей не базовых динамических типов например vector list и подобные. Как записать экземпляр класса в бинарный файл чтобы потом его нормально считать? Через boost...
C++ Решения по Дейтелам http://www.cyberforum.ru/cpp-beginners/thread594591.html
Ребят, такой вопрос, купил книгу Deitel H.M., Deitel P.J. / Дейтел Х.М., Дейтел П.Дж. - Как программировать на С++, очень много заданий, что хорошо, но нет к ним решения в самой книге, то есть не...
C++ Округлить выводимые данные Надо сделать что если х у вводиш милионами числами выводило норм.. спасайте вообще хз как #include <iostream> #include <math.h> #include <conio.h> #include <iomanip> using namespace std;... подробнее

Показать сообщение отдельно
The_Immortal
1552 / 488 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
05.06.2012, 03:44  [ТС]
Avazart, именно что нет. Откуда там abcde?

Внимательнее прочтите это:
Действительно, в памяти szString1 идет сразу за szString2. Соответственно, если их не разделять между друг другом нулевым символом, то szString2 будет включать содержимое szString1 и изменять его (при изменении "конца" у szString2 - и наоборот).

Таким образом, скрин отсюда легко объяснить. Я тогда задавался вопросом:
"странно... А почему тут 'a' (из первой строки) вдруг на /0 перезаписалась?"

Дело в том, что после ввода 20 символов в szString2, на szString2[20] автоматом поместился символ /0, как подсказал нам Toshkarik (т.е. это вовсе не "рандомный мусор", как я предполагал изначально), а на этом месте уже находилось szString[1] (т.к. в памяти эти переменные идут друг за другом). Вот и произошла перезапись. Т.е. szString[1] = \0.
Посмотрите на скрин, там szString1 в самом начале содержит \0 (почему - объяснил выше). Соответственно, когда происходит вызов
C++
1
strcat(szString1, " - ");
то strcat сразу натыкается на \0, считает что оттуда надо начинать запись и пишет " - " (т.е. перезаписывает с самого начала). Т.е. в итоге вместо "\0bcd" записывает " - \0".

Так понятно?

P.S. Блин, а в какую сторону у нулевого символа слэш? А то я и так и сяк... В общем, там где слэш перед ноликом - это у меня нуль-терминатор (какое все-таки страшное название...)
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.