Главная страница
    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.067 c
14-1118217768
Карелин Артем
2005-06-08 12:02
2005.07.11
Армия ада?


14-1118325533
vecna
2005-06-09 17:58
2005.07.11
А кто еще ездеет без дневного/ближнего света? =)


14-1118053014
Vlad Oshin
2005-06-06 14:16
2005.07.11
ЗАВТРА. 1. нареч. На следующий день после сегодняшнего.


14-1118575412
marina_sf
2005-06-12 15:23
2005.07.11
Подскажите код...


14-1118832825
Ega23
2005-06-15 14:53
2005.07.11
Программистские песни





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский