Забытые секреты кодинга №2: строковые операции в C
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Chemiker; e-mail: - 2007-10-03 12:04:27.560000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Сорри конечно, обяснено дальше не куда, но разве тут есть люди не понимающие указателей ???
|
|
|
kas; e-mail: kas_alexey@mail.ru - 2007-10-03 12:04:27.590000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Нормальная статья! Но в своей группе большинство всеже понимают что такое указатели! Но для того у кого нет той части мозга эта статья не поможет!
|
|
|
BOLT; e-mail: - 2007-10-03 12:04:27.620000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
"Но я пока не нашел другого работающего способа преобразовать тип (char) в (char*)." Я целый час смеялся! И ты еще говоришь че-то о нехватке мозгов, отвечающих за указатели!? Да их у тебя НЕТ! Ты когда-нибудь слышал об операторе взятии адреса? Нет? А ты слышал когда-нибудь, что имя массива - это и есть указатель на первый его символ? Нет? А ты слышал когда-нибудь, что в C нет классов и MFC - это библиотека никак не может работать на C? Короче, ребяты, не читайте это дерьмо. Видимо, пацан списал откуда-то и сам не понял что написал! Теперь понятно, почему все называют журнал Xekep отстоем!
|
|
|
Петр Каньковски; e-mail: kankowski@narod.ru - 2007-10-03 12:04:27.636666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
BOLT: "в C нет классов" Да, согласен, нужно было написать C++. Это моя ошибка. "Ты когда-нибудь слышал об операторе взятии адреса?" Если ты возьмешь адрес от char, это будет адрес твоей переменной, а в этом случае нужно передать символ (или байт, если угодно), но передать его как (char*). Надеюсь, понятно :). "имя массива - это и есть указатель на первый его символ". Ну и что? Это адрес m[0], а нам нужен сам m[0], но преобразованный к типу (char*). Прежде чем ругаться, разберись в преобразовании типов.
|
|
|
ZiV; e-mail: - 2007-10-03 12:04:27.653333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
мДА, BOLT - ты сначала разберись в том, что паниша написал, а потом выставляй на показ свои знания. Ты сам себя опозорил, просто смешно. Парниша - молоток, статья хорошая.
|
|
|
G-$$; e-mail: g-ss@yandex.ru - 2007-10-03 12:04:27.683333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Респект) Замечательная статья! Какое-то время назад (вчера уволился))) я подрабатывал преподом по сям, и, когда зашла речь об указателях, кинул им линк на эту статейку. И народ всё понял :) Супер.
|
|
|
BOLT; e-mail: - 2007-10-03 12:04:27.700000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
2) "Можно ли в C работать со строками как в Паскале или Бэйсике? То есть можно ли складывать строки плюсом, автоматически выделять под них память и все такое? Да, можно."
Нет нельзя. Ну, тут ты, видимо, перепутал с C++. Но и в C++ тоже нельзя работать со строками как в Pascal´е. Попробуй сложи "я" и "умный" и че будет? А? Вот именно. В C++ есть механизм переопределения операторов в классах. Так в классе CString переопределены операторы +,=,<,> и т.д. Например, функция CString::operator+( char* str ), которая и переопределяет оператор +, создает новый массив и копирует туда данные из объекта и строки ( str ). Утрировано говоря, можно "сложить" объект и строку, объект и объект, но никак НЕЛЬЗЯ "СЛОЖИТЬ" СТРОКИ между собой. Из-за того что ты привел в пример класс CString, а не класс string, входящий в стандартную бибилотеку C++, у меня предположение, что ты не знаешь что такое STL. Короче, ложанулся ты конкретно.
3) "Как выделить подстроку слева, например, путь к файлу? Подставь нулевой байт в конец подстроки:" p = strrchr(filename, ´\\´); *p = ´\0´; // Теперь в filename записан путь к файлу
Ты хоть смотришь, что пишешь? Это же маразм. Кто-нибудь проверьте этот код. Я даже не проверяя могу сказать, что p будет указывать на симвл ´\0´, т.е. строка ничего не будет содержать.
|
|
|
BOLT; e-mail: - 2007-10-03 12:04:27.700000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Показывал знакомым статью, чтобы посмеятся. Пришлось отвечать. Ну, ладно давай по порядку:
1) "Строка в Си - это указатель на символ (char)."
Это еще не строка.
char c = ´a´; char *c2 = &c;
Разве это строка? Нет? Ну что ж ты так? А? Строка в C/C++ - это как минимум два символа: char str[] = "a"; Вот это строка. Символ ´a´ плюс ´\0´ - конец строки. А указатель на символ - это указатель на символ, но никак не строка.
|
|
|
BOLT; e-mail: - 2007-10-03 12:04:27.713333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
4)"Кстати, во многом это проблема программистов Microsoft…"
Да? А мне кажется, что это у тебя проблемы. Делается это в два счета: CharUpperBuff( &m[0], 1 ); CharUpperBuff( &m[2], 2 );
Дальше мне просто надоело. Статья просто отстойная. Ошибка на ошибке.
|
|
|
vekles; e-mail: - 2007-10-03 12:04:27.730000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Нашедшему хоть один секрет кодинга в этом тексте воздвигну памятник из материала заказчика.
|
|
|
Петр Каньковски; e-mail: kankowski@narod.ru - 2007-10-03 12:04:27.730000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
To G-$$ и ZiV: Спасибо за добрые слова. Хотя BOLT действительно в чем-то прав: ошибка C/C++ была довольно грубой.
|
|
|
Петр Каньковски; e-mail: kankowski@narod.ru - 2007-10-03 12:04:27.730000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
2BOLT: "Я даже не проверяя могу сказать, что p будет указывать на символ \0." Правильно, а filename будет содержать путь к файлу, как и было написано в статье. "CharUpperBuff( &m[0], 1 );" Да, можно и так. А можно и через CharUpper(). "Так в классе CString переопределены операторы +,=,<,> и т.д." Хорошо, значит вопрос в том, что мы назовем строкой - указатель на массив символов, заканчивающийся нулевым символом, или же будет считать и объект строкой тоже. Если ты можешь проводить с объектом все операции, которые делаешь со строками в Паскале, почему бы не сказать, что это строка?
|
|
|
BOLT; e-mail: - 2007-10-03 12:04:27.730000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
2ZiV: А ты вообще чего квакаешь? Где я опозорился? Приведи хоть один аргумент? Все, что я написал основывается на фактах. А от таких как ты, только и умеющих пи*деть и ничего кроме этого, меня тошнит.
|
|
|
NONAME; e-mail: Boba@rambler.ru - 2007-10-03 12:04:27.746666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Проверка
|
|
|
ILia; e-mail: veryhot@hotmail.ru - 2007-10-03 12:04:27.776666
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Статья так себе - общие заметки для начинающего программера. Не нашел в ней ничего интересного… =(
|
|
|
nickname Black; e-mail: blade_antiskin@mail.ru - 2007-10-03 12:04:27.793333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Не думаю, что "секрктами" можно назвать то, без чего языком Си никто и никогда бы не пользовался. Не претендуя на секрктность могу добавить что массив символов можно объявить с любым целым типом: str = new int. Это имеет смысл, потому что функции чтения из файла возвращают -1, когда достигнут конец файла, а т.к. char - тип беззнаковый, возникает геморрой при проверке этого условия: if(chr==-1)…
|
|
|
Nelly; e-mail: trishi@ua.fm - 2007-10-03 12:04:27.810000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Статья - супер. Очень помогла. Хотя использовала я её не для того, чтобы научиться работать с указателями, а чтобы разобраться с функциями для работы со строками. Это единственная ссылка, которая мне реально помогла. Только вот ещё хотелось бы, если можно, чтобы статью именно про строки и все-все функции для работы с ними сделали. Если можно, конечно!
|
|
|
nickname Black; e-mail: blade_antiskin@mail.ru - 2007-10-03 12:04:27.810000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
["имя массива - это и есть указатель на первый его символ". Ну и что? Это адрес m[0], а нам нужен сам m[0], но преобразованный к типу (char*). Прежде чем ругаться, разберись в преобразовании типов.] Минуту, если нам нужен указатель на символ ("преобразовать символ в указатель" ну никак нельзя:-)) не проще ли накодить: char *p; p=m; Тогда *p будет давать тот самый первый символ, а p (без звезды) - его адес в строковой переменной. Боюсь, Bolt был прав.
|
|
|
Lori; e-mail: phillip@pisem.net - 2007-10-03 12:04:27.823333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Thank you! http://quvmqfuq.com/fbky/cjvi.html | http://yltfetpv.com/cqjz/quvr.html
|
|
|
RE: Забытые секреты кодинга №2: строковые операции в C - 2007-10-03 12:04:27.840000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
спасибо за статью… наконецто я решил одно из заданий по контрольной :) статья здорово помогла…
|
|
|
Кто-то сможет помочь в маленьком задании? - 2007-10-19 21:41:50.573333
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Привет всем, заранее извините. Надо запустить файл с параметром. Visual studio 6.0
char* par1; char* par2; char* sumpar; par1="cmd.exe"; par2="Привет"; sumpar="Ваня"+par2+"петя";//КАК ЭТО сложить ShellExecute(Null,"open",par1,sumpar,NULL,SW_SHOW);
|
|
|
Извините ступил. - 2007-10-19 22:28:34.520000
|
|
|
Guest
Сообщений: 83368
Оценки: 51
Присоединился: None
|
Спасибо за помощь
|
|
|
|
|