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

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

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

Показать сообщение отдельно
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
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, не зря там адреса выводятся.)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru