Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];
ВнизПеревод Array of char в String Найти похожие ветки
← →
Begu (2005-06-15 04:15) [0]как правильно реализовать сабж?
есть:
c: array[1..10] of char;
s: string;
FillChar(c, SizeOf(c), 0);
при присвоении s := c; длина s становится = 10, даже если в массиве одни 0.
← →
Просто Джо © (2005-06-15 04:17) [1]
> длина s становится = 10, даже если в массиве одни 0.
А сколько должно быть по-твоему?
← →
Begu (2005-06-15 04:20) [2]должно быть 0
← →
Просто Джо © (2005-06-15 04:30) [3]Переменная типа string может хранить любые символы. Символ с кодом 0 в ней не является признаком конца строки. Ты перепутал string и null-terminated string.
← →
Просто Джо © (2005-06-15 04:36) [4]Вдогонку. Длина строки типа string хранится отдельно, а именно в ячейке размером в двойное слово по относительному адресу [Адрес_строки-4]. Пройдись отладчиком по телу встроенной процедуру LStrLen и все поймешь.
Заключительный символ с кодом 0 добавляется к строкам для совместимости с C-шными строками, используемыми в Windows, т.е, указатель на массив символов PChar.
Возможно, не слишком корректноя формулировка, что-то я спать хочу :)
← →
Begu (2005-06-15 04:38) [5]я не теорию спрашивал, а задал конкретный вопрос
← →
Просто Джо © (2005-06-15 04:38) [6]
> [5] Begu (15.06.05 04:38)
> я не теорию спрашивал, а задал конкретный вопрос
А из теории слабо сделать выводы?
← →
Просто Джо © (2005-06-15 04:49) [7]
> [2] Begu (15.06.05 04:20)
> должно быть 0
Так с какого, прости, перепугу, должно быть 0?
← →
Begu (2005-06-15 04:50) [8]слабо
я думаю такие вещи должны быть борландом реализованы, а не нужно новые функции преобразования писать.
← →
Просто Джо © (2005-06-15 04:51) [9]
> слабо
> я думаю такие вещи должны быть борландом реализованы, а
> не нужно новые функции преобразования писать.
Они реализованы. И заодно, ответь, пожалуйста на [7].
← →
Begu (2005-06-15 04:52) [10]>Просто Джо © (15.06.05 04:49) [7]
потому что я думал, что компилятор при преобразовании воспринимает array of char как PChar
← →
Begu (2005-06-15 04:52) [11]Удалено модератором
Примечание: МАТ, нападки
← →
Просто Джо © (2005-06-15 04:54) [12]
> я думал, что компилятор при преобразовании воспринимает
> array of char как PChar
Нужно прежде чем думать, хелп прочитать. А после этого объявить массив по-человечески, а именно:
c: array [0..10] of char;
← →
Просто Джо © (2005-06-15 04:57) [13]Удалено модератором
← →
Begu (2005-06-15 04:59) [14]Удалено модератором
← →
Просто Джо © (2005-06-15 05:00) [15]Удалено модератором
← →
Begu (2005-06-15 05:05) [16]Удалено модератором
← →
Просто Джо © (2005-06-15 05:07) [17]Удалено модератором
← →
Begu (2005-06-15 05:09) [18]Удалено модератором
← →
-=XP=- © (2005-06-15 07:28) [19]потому что я думал
Это Вы еще пока только раздел "Введение" подумали. Думайте дальше, до раздела "Строковый тип данных". Там, на последних страницах, даны примеры - отталкивайтесь от них.s := PChar(c[Low(c)]);
← →
-=XP=- © (2005-06-15 07:38) [20]Блин, еще не проснулся, а вы тут вопросами неумными грузите.
s := PChar(@c[Low(c)]);
← →
Begu (2005-06-15 07:53) [21]вот и видно, что ты только проснулся :)
ответ то уже был раньше:
array должен с 0 начинаться, а если с 1, то так:
s := PChar(@c);
← →
VMcL © (2005-06-15 07:56) [22]Удалено модератором
← →
Begu (2005-06-15 08:00) [23]>VMcL © (15.06.05 07:56) [22]
это ты о чем, какая матчасть?
← →
Alx2 © (2005-06-15 08:00) [24]>Begu (15.06.05 07:53) [21]
s := PChar(@c);
и неважно с чего индекс начинается.
← →
Begu (2005-06-15 08:04) [25]>Alx2 © (15.06.05 08:00) [24]
а ты проверь с 1
← →
Begu (2005-06-15 08:06) [26]>Alx2 © (15.06.05 08:00) [24]
эт я уже спать начинаю, я так и сказал
а если с 0 начинается, то можно так s := c;
← →
Alx2 © (2005-06-15 08:06) [27]>Begu (15.06.05 08:04) [25]
Var D : array [10..21] of char;
k : integer;
Begin
for k := Low(D) to High(D) do D[k]:=Char((k mod 10) +byte("0"));
D[High(D)]:=#0;
ShowMessage(PChar(@D));
End;
← →
Alx2 © (2005-06-15 08:08) [28]>Begu (15.06.05 08:06)
>а если с 0 начинается, то можно так s := c;
Var D : array [12..21] of char;
k : integer;
s : string;
Begin
for k := Low(D) to High(D) do D[k]:=Char((k mod 10) +byte("0"));
s := D;
ShowMessage(S);
End;
← →
Begu (2005-06-15 08:11) [29]и что ты хотел этим сказать, кроме того, что сказано выше?
← →
Alx2 © (2005-06-15 08:11) [30]Или сразу
Var D : array [12..21] of char;
k : integer;
Begin
for k := Low(D) to High(D) do D[k]:=Char((k mod 10) +byte("0"));
ShowMessage(D);
End;
Так как к типу string автоматом преобразуется.
← →
Alx2 © (2005-06-15 08:11) [31]>Begu (15.06.05 08:11)
Повторяю:
"и неважно с чего индекс начинается."
← →
Begu (2005-06-15 08:14) [32]а ты сделай такую простую вещь:
c: array[1..10] of char;
s: string;
FillChar(c, SizeOf(c), 0);
с[1] := "a";
s := c;
теперь поставь точку останова на последнюю строку и посмотри чему у тебя s стала равна
← →
Alx2 © (2005-06-15 08:21) [33]Begu (15.06.05 8:14) [32]
Да, согласен. В этом случае разница есть.
← →
Zeqfreed © (2005-06-15 08:25) [34]Begu (15.06.05 8:14) [32]
Alx2 имеет в виду, что преобразовать массив Char"ов можно к типу String не зависимо от начального индекса массива. О том, что методы будут одинаковыми никто не говорил.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.041 c