Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Массив строк  (Прочитано 8215 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« : 26-11-2010 13:00 » 

Запуталась, прошу особо не ругаться.
Есть функция, типа
char* kuku(int nErr,int nBit)
{
char *TextErr[]={
 "ошибка самодиагностики",
 "ошибка при передаче бегущей  '1' разряд   ",
 "ошибка при передаче бегущего '0' разряд   "};

..

return *(TextErr+nErr);
}
Вопрос: как проставить добавить номер разряда(nBit) в текст 2 или 3 строки?
В одних вариантах вылетает, в других ничего не меняется.
Приводить их не буду, чтобы не позориться.



Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 26-11-2010 13:22 » 

Например, вставлять в нужное место буфера при помощи sprintf.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 26-11-2010 14:29 » new

Поддерживаю, sprintf + использовать строку в качестве форматной, что-то вроде:
Код:
char *TextErr[]={
 "ошибка самодиагностики",
 "ошибка при передаче бегущей  '%d' разряд   ",
 "ошибка при передаче бегущего '%d' разряд   "};

char message[256];
sprintf(message, TextErr[1], 4); // message == "ошибка при передаче бегущей  '4' разряд   "
(за точность кода не ручаюсь, пример из головы - см. справку по sprintf, + нужно помнить о размере буфера, чтоб не переполнить - или, в случае MS, использовать sprintf_s)
Записан
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #3 : 30-11-2010 07:29 » 

char *TextErr[]={
 "ошибка самодиагностики",
 "ошибка при передаче бегущей  1 разряд   ",
 "ошибка при передаче бегущего 0 разряд   "};

TextErr[1] - добираемся до строки , а как добраться до символа в этой строке( например, к 20 символу этой строки)? По сути дела это массив адресов этих строк.

Если бы я описала это по-другому,то всё было бы предельно ясно:
char TextErr[3][50]={
 "ошибка самодиагностики",
 "ошибка при передаче бегущей  1 разряд   ",
 "ошибка при передаче бегущего 0 разряд   "};

TextErr[1][20]='8'; // и запишется 8 посреди текста


Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 30-11-2010 07:39 » 

Именно так и пишите:

Код: (C)
TextErr[1][20]='8'; // и запишется 8 посреди текста

В языке C отличие между массивом и указателем на его первый элемент весьма эфемерно.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #5 : 30-11-2010 08:51 » 

Если бы было так просто, то я бы не спрашивала.
Если char* TextErr[]={...}, то при TextErr[1][20]='8'; программа вылетает!
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 30-11-2010 09:01 » 

ann_nef, первое - это инициализация: задается размерность массива и в фигурных скобках представлены строковые константы для инициализации.

Код: (C)
char * a[] = {"aaaaa", "bbb", "cc"};

Здесь создается массив указателей, которым присваиваются указатели на константы. Писать в константы нельзя!
« Последнее редактирование: 30-11-2010 09:46 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ann_nef
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #7 : 30-11-2010 09:13 » 

Да, RXL прав. Я только что сама это поняла.
Можно только читать, поэтому сс = TextErr[1][20];  работает.
Спасибо за ответы.
В программе ещё сделала по-другому, но хотелось понять, что не так.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines