Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Перевод 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.041 c
14-1118735941
leonidus
2005-06-14 11:59
2005.07.11
Отзовитель кто пишет плагины для FireFox


14-1118651662
syte_ser78
2005-06-13 12:34
2005.07.11
Вопрос по HTML


3-1116433390
Делфенок
2005-05-18 20:23
2005.07.11
Чтение информации из dbf


1-1119349392
sergey_spy
2005-06-21 14:23
2005.07.11
Смешанный алгоритм: FIFO+абсолютный приоритет


3-1117625167
Aljona
2005-06-01 15:26
2005.07.11
TTable





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский