Уточни, пожалуйста, чтобы не писать впустую:
1) Постоянная ли длина массива?
2) Если постоянная, то какие строки - просто константы или ты хочешь иметь возможность их менять?
3) С или С++? (или что-то ещё?)
Могу, конечно, написать все варианты, но не хочется время тратить на то, что никому не нужно...
На C - char* strings[STRINGS_COUNT] - создаёшь массив указателей на строки. Потом его заполняешь - или указателями, полученными откуда нибудь, или сам делаешь что-нибудь вроде
for (i = 0; i < STRINGS_COUNT; i++)
{
strings[i] = malloc (7);
strcpy (strings[i], "Привет");
}
После этого strings[1][2] - это 2-я строка, 3-й символ. Если тебе нужно изменить какую-нибудь строку так, что увеличится её длина, то прийдётся выделить место для новой строки malloc'ом, записать в неё всё что нужно, освободить старую строку с помощью free, а потом переписать указатель в массиве.
На С++ всё, естественно, проще - делаешь std::string strings[STRINGS_COUNT] и всё. Здесь опять strings[1][2] - это 2-я строка, 3-й символ. Строки можешь менять как хочешь, и не надо мучаться с выделением/освобождением памяти - string всё делает сам.
В const char* - метод c_str (). В char* может и можно как-то просто перевести, но делать этого лучше не надо - надёжнее выделить свой буфер и скопировать туда результат c_str ().
Большое человеческое спасибо, вопросов больше пока нет. То есть есть, но он не на эту тему.
Я сейчас пишу все в редакторе wedit (русский, удобный) , компилирю из
командной строки, но мне бы хотелось какую-либо среду разработки под
консоль, чтобы сама отступы делала, что надо - другим текстом выделяла, может посоветуешь что-нибудь.
Щас тебе народ посоветует vi или emacs и начнёт флейм сообщений на двадцать :-)
Я пользуюсь редактором mc (mcedit) в консоли и emacs'ом (обычным) в X. Хотя последнее время я под Линуксом не часто программирую.
c_str - это метод класса string - то есть берёшь переменную типа string, после неё пишешь точку, а потом c_str (), например
std::string s;
const char* c;
c = s.c_str ();
Вот теперь все понятно и работает, огромное спасибо за терпение к моему незнанию, если можно еще один вопрос (я в указателях и всем этом пока не очень разбираюсь) что такое char* ?
Теоретически - тип char* это указатель на один байт - то есть, переменная размером в 4 байта (на 32-битных процессорах), значением которой является адрес, на котором этот байт расположен в памяти.
Практически - в C/C++ способ работы со строками такой, что если у тебя есть переменная char* stroka, то она обозначает строку, которая начинается с байта, на который указывает stroka и кончается первым байтом после этого с кодом 0.
Я надеюсь, что я это всё не запутал окончательно ;-) Пиши вопросы. Кстати, можем перейти на e-mail.
Пока что вопросов нет, но они скоро обязательно появятся (в этом уверен на 100%). Мой мэйл - timur-kar@mail.ru,
очень бы хотелось узнать твой. Спасибо за все!