Форум: "Основная";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c