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

Вниз

String и array of char   Найти похожие ветки 

 
starik30   (2003-07-01 11:50) [0]

Hi !
есть
var
str1 : string;
AChar : array [0..9] of char;

Помогите разобраться в 2-х вопросах :
- как строковой переменной(str1) присвоить значение AChar);
- как массиву AChar присвоить значение строковой переменной;

P.S. В цикле сам знаю -)) (а хочеться получит ответ почему нельзя str1:=AChar)

Заранее благодарен
Юра


 
Palladin ©   (2003-07-01 11:56) [1]

string это и есть array of char,
AChar:array [0..9] of char; равносильно AChar:string[10]; только индексация с 1 начинается...


 
Poirot ©   (2003-07-01 11:57) [2]

1 - str1 := AChar - это если вы про Делфи....


 
Poirot ©   (2003-07-01 11:58) [3]


> Palladin ©

вот в этом и проблема? Что типа если пытаться привести к массиву, то получим на 1 байт больше...
Всётаки вопрос - на каком языке пишем (вернее где компиляете)!!!


 
DVM ©   (2003-07-01 12:06) [4]


> starik30

Может не в тему, но в Delphi в 99% случев можно обойтись без этого наследия языка С - array of char. Есть же string, pchar, есть SetLength, наконец.


 
Palladin ©   (2003-07-01 12:07) [5]

ну если прикалываться то можно сделать так

type
String10=string[10];

var
str1 : string;
AChar : array [0..9] of char;

str1:=String10(AChar)


 
DVM ©   (2003-07-01 12:08) [6]


> Palladin © (01.07.03 11:56)
> string это и есть array of char,

Не совсем. По-моему, это скорее про shortstring


 
starik30   (2003-07-01 12:09) [7]

> Palladin
компилятор -Delphi5

Я тоже так думал... Но почему тогда на попытку сделать
str1:=trim(AChar) в окне просмотра получаем результат -
Expression illegal in evaluator, а на обратное присваивание AChar:=str1 - не пропускает компилятор (ошибка- не совместимость типов).

Программа, где используется выражение str1:=trim(AChar) работает с ошибками - раз 20 нормально - потом вылетат с ошибкой и есть подозрение на вышеуказанную строку...

Юра


 
Palladin ©   (2003-07-01 12:11) [8]

В любом случае s[i] никто никогжда еще не запрещал...


 
Palladin ©   (2003-07-01 12:14) [9]


> starik30 (01.07.03 12:09)

в принципе меня компилятор не интересовал...

почему именно array [0..9] of char? почему не string[10]?


 
Юрий Федоров ©   (2003-07-01 12:23) [10]

string[10] - это ShortString, то есть совсем не то же, что array [0..9] of char
С "array [0..9] of char" можно работать как с PChar (выделение \ освобождение памяти выполняется компилятором),
то есть для присвоения массиву строковой переменной нужно вызвать что-то типа
StrLCopy(AChar, PChar(str1), High(AChar));
В обратную сторону - обычное присвоение


 
starik30   (2003-07-01 12:28) [11]

> Palladin

Потому что array of char обьявлен

type
TAllRecord = packed record
..
AChar : array [0..9] of char;
...
end;


AAllRecord : array of TAllRecord;

Все это для того чтобы загнать файл в массив записей а потом работать с массивом. Попытка написать так
{$h-}
type
TAllRecord = packed record
..
AChar : string[10];
...
end;
{$H+}

приводят к увеличению размера записи


 
Palladin ©   (2003-07-01 12:33) [12]

ну тогда делай как Юрий Федоров © (01.07.03 12:23)
или
var
s:string;

setlength(s,sizeof(achar));
move(a[0],s[1],sizeof(achar));


 
starik30   (2003-07-01 12:33) [13]

> Юрий Федоров

почему тогда в окне просмотра (Ctrl+F7) trim(AChar) получаем результат - Expression illegal in evaluator ? Да и в коде моей проги ничего особо хитрого нет - но через раз 20 программа вылетает с ошибкой ...


 
Юрий Федоров ©   (2003-07-01 12:40) [14]

>>starik30 (01.07.03 12:33)
Окно просмотра часто "глючит" при включенной оптимизации.
Через 20 раз вылетает - дело в чем-то другом


 
starik30   (2003-07-01 13:09) [15]

>Юрий Федоров

Только что под отладчиком нашел строку в программе, где вылетает ошибка :
str1:="test 1 "+trim(AChar);




Страницы: 1 вся ветка

Текущий архив: 2003.07.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
1-44666
race1
2003-06-29 17:56
2003.07.14
VTV


14-44901
nick-from
2003-06-27 00:05
2003.07.14
конкурс: Лучший 19 ЭЛТ монитор (если можно с комментами)


7-44934
Ал
2003-04-22 15:56
2003.07.14
Работа с ActiveDesktop через CreateComObject


14-44870
Bill
2003-06-27 12:27
2003.07.14
Преобразование строки в математическое выражение


14-44892
gsv_
2003-06-26 16:26
2003.07.14
Сделал TdataModule -> TwebModule: не работает ISAPI/NSAPI