Форум: "Начинающим";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
Внизarray of Char + string Найти похожие ветки
← →
maxwam (2008-03-03 17:58) [0]
x1: array [0..15] of Char;
x2: string;
я хочу сделать x1 := x2, как такого лучше всего добиться?
← →
Palladin © (2008-03-03 18:00) [1]ты не поверишь
x2:=x1;
← →
Palladin © (2008-03-03 18:02) [2]о блин... гоню... наоборот же...
move(x2[1],x1,16);
← →
Eraser © (2008-03-03 18:22) [3]
> move(x2[1],x1,16);
в свете выхода CDS2008 с поддержкой unicode так бы не стОит делать, imho )
← →
DiamondShark © (2008-03-03 18:27) [4]StrPLCopy(x1, x2, 15)
← →
Palladin © (2008-03-03 18:44) [5]
> DiamondShark © (03.03.08 18:27) [4]
это не совсем то, что нужно, массив содержит 16 символов и не оканчивается нулем. если уж и мерятся органами, то должно быть такl:=Length(x2);
If l>=16 Then Move(x2[1],x1,16) Else
Begin
Move(x2[1],x1,l);
ZeroMem(x1[l],16-l); // на всякий случай
End;
ну а с учетем модных супер нововведений, на которые сразу всем миром перейдут, рассказынных многоуважаемым Eraser © (03.03.08 18:22) [3], который перейдет самый первый на cds2008 :))), то думаю возможно будет организовать нечто подобное
l:=Length(x2);
If l>=32 Then Move(x2[1],x1,32) Else
Begin
Move(x2[1],x1,l*2);
ZeroMem(x1[l],32-l*2); // на всякий случай
End;
это конечно при условии что char вдруг станет widechar по-умолчанию, а string соответсвенно widestring... хотя там еще и utf может наблюдаться... так что мрак...
← →
clickmaker © (2008-03-03 18:51) [6]
> [5] Palladin © (03.03.08 18:44)
lstrcpyn(x1, PChar(x2), Sizeof(x1)); // ANSI
lstrcpynW(x1, PWChar(x2), Sizeof(x1) shr 1); // Unicode
← →
Palladin © (2008-03-03 19:02) [7]
> clickmaker © (03.03.08 18:51) [6]LPTSTR lstrcpyn(
LPTSTR lpString1, // address of target buffer
LPCTSTR lpString2, // address of source string
int iMaxLength // number of bytes or characters to copy
);
Parameters
lpString1
Points to a buffer into which the function copies characters. The buffer must be large enough to contain the number of bytes (ANSI version) or characters (Unicode version) specified by iMaxLength, including room for a terminating null character.
...
я бы не стал поправлять [4]
у нас не ASCIIZ, WASCIIZ сторка, у нас массив из 16 символов
← →
clickmaker © (2008-03-03 19:07) [8]
> у нас не ASCIIZ, WASCIIZ сторка, у нас массив из 16 символов
у нас строка, которую мы записываем в массив, который станет ASCIIZ после этого
← →
Eraser © (2008-03-03 21:45) [9]строки не предназначены для хранения данных.
← →
korneley © (2008-03-03 21:50) [10]
> Eraser © (03.03.08 21:45) [9]
> строки не предназначены для хранения данных.
Эта... В каком смысле? Байты, призванные олицетворять символы, поражены в правах называться данными? Заинтригован...
← →
DVM © (2008-03-03 22:23) [11]
> maxwam (03.03.08 17:58)
Вроде так тоже должно получиться (не проверял)
x2:=strpas(PChar(@x1));
← →
Eraser © (2008-03-03 22:24) [12]> В каком смысле?
в смысле не строковых данных.
← →
DVM © (2008-03-03 22:26) [13]
> в смысле не строковых данных.
строковые от не строковых данных отличаются лишь тем что мы сами их так обзываем.
← →
Eraser © (2008-03-03 22:47) [14]вот это открытие.
← →
DVM © (2008-03-03 22:49) [15]
> Eraser ©
что такое по твоему строка?
← →
Eraser © (2008-03-03 23:01) [16]> [15] DVM © (03.03.08 22:49)
это набор символов, при этом количество памяти, занимаемое каждым символом может отличаться.
для работы со строками надо использовать строковые функции.
← →
korneley © (2008-03-03 23:12) [17]
> Eraser © (03.03.08 23:01) [16]
> это набор символов, при этом
> количество памяти, занимаемое каждым символом может отличаться.
А по моему строка это тип данных, характеризующийся своими правилами обработки и интерпретации результата.
> для работы со строками надо использовать строковые функции.
Тут согласен, особенно, если заменить "надо" на "рекомендуется".
← →
DVM © (2008-03-03 23:17) [18]
> это набор символов, при этом количество памяти, занимаемое
> каждым символом может отличаться.
Все верно. Причем всегда должна быть известна длина этого набора символов. Или как то помечен конец.
Поэтому строкой вообще говоря можно считать любую область памяти с любыми произвольными данными известной нам длины. И известным началом и концом. Как трактовать этот набор байт - другой вопрос.
← →
Palladin © (2008-03-03 23:20) [19]
>clickmaker © (03.03.08 19:07) [8]
массив должен содержать 16 значимых символов, а не 15 и ноль в конце именно потому, что он задекларирован так и никак иначе. и неважно что там. array [0..15] of char или array [0..3] of cardinal.
← →
Eraser © (2008-03-03 23:42) [20]> [17] korneley © (03.03.08 23:12)
все что угодно можно интерпритировать, как нетипизированный указатель на кусок памяти длиной X.
только не просто так умные люди придумали типизацию данных, imho )
> [18] DVM © (03.03.08 23:17)
> Как трактовать этот набор байт - другой вопрос.
именно, для того и придумали строковые функции, а самому изобретать велосипед хоть никто и не запрещает, но потом после [2] не стОит удивляться, что через пол годика, после релиза 2008, на форуме начнут появлятся соответствующие вопросы )
← →
korneley © (2008-03-04 00:05) [21]
> Eraser © (03.03.08 21:45) [9]
> строки не предназначены для хранения данных.
> Eraser © (03.03.08 22:24) [12]
>в смысле не строковых данных.
То есть строки все же данные. Но строки. Поэтому любые значения, помещаемые в строку, данными быть не перестают, да и ничем не отличаются от таких же, но в других структурах. Строка это только то, что мы интепретируем как строку. А работать, правильно, лучше с функциями, а не закладываться на внутреннее представление.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.233 c