Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1118397636
A№t0№
2005-06-10 14:00
2005.07.11
Три первых символа из RichEdit


9-1112345536
@!!ex
2005-04-01 12:52
2005.07.11
Доки OpenGL, GLSL.


1-1118899896
ANB
2005-06-16 09:31
2005.07.11
Как пройти BPL/DLL в отладчике ?


1-1119341906
salexn
2005-06-21 12:18
2005.07.11
Почему на 98 виндах возникает ошибка Cannot load cursor resource


3-1117309235
Nikitian
2005-05-28 23:40
2005.07.11
Сортировака при помощи table Неиндексному полю





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