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

Массив символов в структуре - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Удаление элемента массива http://www.cyberforum.ru/cpp-beginners/thread108140.html
Здравствуйте. Необходимо удалить из массива А(20) первый отрицательный элемент,при этом ввод элементов массива необходимо осуществить с клавиатуры. Язык - С.
C++ Найти минимум среди сумм элементов диагонали матрицы, параллельных побочной диагонали Пожалуйста, помогите решить задачку Дана целочисленная прямоугольная матрица. определить: 1) колво строк, не содержащих ни одного четного элемента; 2) минимум среди сумм элементов диагонали, параллельных побочной диагонали. Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread108129.html
найти в массиве непрерывный участок из 10 чисел с наибольшим средним значением C++
Проверьте пожалуйста, почему все средние значения (второй массив) одинаковы Задание: найти в массиве непрерывный участок из 10 чисел с наибольшим средним значением #include <iostream.h> #include <conio.h> #include <stdlib.h> const int n=200;
microsoft agent как запустить в C++ C++
дайте пожалуйста исходник , ил просто код как запустить персонажа из microsoft agent на языке С++ Добавлено через 19 часов 3 минуты народ ну попомиге:(
C++ Что за ошибка??? http://www.cyberforum.ru/cpp-beginners/thread108063.html
помогите доделать код #include <iostream> #include <vector> #include <cmath> #include <ctime> #include <algorithm> using namespace std; void out(int n, vector<int> &f1) {
C++ Диаграмма классов Здраствуйте!! Подскажите, пожалуйста, как можно создать диаграмму классов в Visual Studio. Я знаю,что там можно сгенерировать диаграмму по уже написаному коду, но мне нужно сначала создать диаграмму классов, а по ней получить код. Я выполняю такую очередность действий: File->New->Project->Empty Project. Потом из toolbox перетягиваю элемент в рабочую область и создается класс. Проблема в том, что... подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
30.03.2010, 18:33     Массив символов в структуре
Компилятор ты обманешь, но себя нет. Смотри, ты просто напросто введёшь новое имя типа char, в котором цифра 15 абсолютно ничего не будет значить. Просто string[15] новое имя и всё тут.

Естественно, s.group[i] теперь будет иметь тип char* (или что то же самое string[15]*), поэтому и компильнётся. Но!

Во-первывх, я тебе предлагал то же самое, объявить переменную типа char* и с ней работать (предпоследний вариант)

А во-вторых (и это главное!) Тебе нужен массив из 15-ти СВОБОДНЫХ ячеек. Работая так, ты его не получишь. То есть эта штука
C++
1
s.group[i]
будет действительно содержать адрес элемента типа char, и можно даже так будет писать:
s.group[i][0] или s.group[1] и всё будет работать, но! Никто тебе не даст гарантии,
что ты не прописываешь память. ПО другому: По этим адресам:
&s.group[i][1] или &s.group[i][2] и так далее (но не &s.group[i][0]!)

могут запростто находиться нужные тебе данные, которые ты просто-напросто затрёшь.
Бессонная ночь с отладчиком обеспечена. А ты умеешь им пользоваться?

...Справедливости ради скажу, что такая ситуация довольно редка, как правило
компилятор если присваиевает указателю на char какое-нибудь значение, то почти всегда
ячеек сколько-то там за этоя ячепйкой пусты. То есть
&s.group[i][0] это "наша" ячейка, а &s.group[i][1] уже не наша, но она скорее всего не
задействована.Ну и прочие не задействованы, сколько их там, сто ли, двести ли.
Но как узнать наверное? Не рекомендую,в общем рисковать. Я один раз в
жизни напоролся на такую ошибку, больше не хочу.

...Кстати, потому я выше где-то не рекомедовал писать s.group[i].str[15]

Добавлено через 30 минут
...Так чё далеко ходить, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
 
int main () {
 
   
 char per_1= 'a';
 char per;
 char* ukaz= &per;
 printf ("per_1= %c\n", per_1);
 printf ("adres per= %x\n", &per);
 printf ("adres per_1= %x\n", &per_1);
 
 char stroka []= "stroka"; 
 
 strcpy(ukaz, stroka);
 
 printf ("per_1= %c\n", per_1);
 
 getchar ();
 
}
...Рекомендую изучить. Как раз иллюстрирует то, о чём я говорю. Дыва раза выводится значение переменной per_1 и оба раза разное, хотя мы её вообще не трогали. Просто-напросто скопированли строку по адресу переменной per.

И затёрли к матери per_1, как раз символ t прописали на её место (она стоит в аккурат после per, не зря там адреса выводятся.)
 
Текущее время: 12:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru