Форум: "Начинающим";
Текущий архив: 2014.02.16;
Скачать: [xml.tar.bz2];
ВнизCopy String to Char Array Найти похожие ветки
← →
Афонтий (2013-04-04 19:11) [0]Доброго времени суток!
Имеется:A: Array [0..N] Of WCHAR;
B: String="testing!";
Как осуществить:A:="blabla"; // ??? // A:=B;
Вообще работает так вот (на коленке наваял), но может ошибки наделал, али есть готовые функции?:Procedure CCC(A: String; Var B: Array Of WCHAR);
Var i: Integer;
Begin
i:=0;
While (i<Length(A)) And (i<Length(B)) Do
Begin
B[i]:=WCHAR(A[i+1]);
Inc(i);
End;
End;
← →
clickmaker © (2013-04-04 19:16) [1]> есть готовые функции?:
StringToWideChar()
← →
Афонтий (2013-04-04 19:21) [2]Ошибок не выдаёт, но и текста нету, пусто. =(
Где я дурак?
← →
Rouse_ © (2013-04-04 20:06) [3]move за глаза
← →
Dimka Maslov © (2013-04-04 21:05) [4]1. А цикл for уже отменили?
2. Давным давно сделали функцию StrPCopy
3. Строка и есть массив символов, зачем нужен лишний тип?
← →
KilkennyCat © (2013-04-04 21:11) [5]
> Где я дурак?
> Как осуществить:
>
> A:="blabla"; // ??? //A:=B;
> Вообще работает так
>B[i]:=WCHAR(A[i+1]);
ты уж определись, откуда куда
← →
NoUser (2013-04-04 21:43) [6]
> Ошибок не выдаёт, но и текста нету, пусто. =(
> Где ..
Procedure CCC(A: String; Var B: Array Of WCHAR);
type TChars = Array Of Char;
Procedure ToArr(const A: string; var B: TChars);
Begin
SetLength(B, Length(A) );
Move(A[1], B[0], Length(A) * sizeof(Char) );
End;
← →
Игорь Шевченко © (2013-04-04 23:33) [7]А что надо сделать-то ? Ansi-строку в Widechar массив преобразовать или наоборот ?
← →
Афонтий (2013-04-05 12:07) [8]> [5] > ты уж определись, откуда куда
Всё правильно, это же внутри функции, локальные переменные! Ну назвал наобум и совпали и перепутались словно... Так лучше?:
// прототип: Procedure CCC(Input: String; Var Output: Array Of WCHAR);
Output[i]:=WCHAR(Input[i+1]);
// вызов: CCC("blabla", A); // A:="blabla";
> [4]
ну... Спасибо, похоже очень, но у меня же WCHAR, получаются иероглифы какие-то вместо моей строки. =)))))
> [3]
гм... А ничего что CHAR и WCHAR разного SizeOf? Строки по умолчанию вроде ANSI? Как-то явно приводить тип сперва?
Спасибо. С:
> [7] > А что надо сделать-то ?
Есть чужая функция (в dll). Один из параметров функции чужая struct (указатель или по ссылке, как там правильно говорить?). Одно из полей этой структуры типа "Array [0..127] Of WCHAR". Править заголовочник идущий с dll мне нельзя.
Объявляю переменную типа этой структуры, заполняю поля, передаю в функцию. Только не знаю как в это поле засунуть константу "Hello World!" например, или переменную типа String:
[Error] Project1.dpr(): Incompatible types: "Array" and "String"
...
[Error] Project1.dpr(): Incompatible types: "Array" and "WideString"
А к примеру так вполне работает, но выглядит прискорбнейше. :3
Strct.Fld[0]:="H";
Strct.Fld[1]:="e";
Strct.Fld[2]:="l";
Strct.Fld[3]:="l";
Strct.Fld[4]:="o";
...
Повожусь с move, думаю должно получиться)
← →
Игорь Шевченко © (2013-04-05 12:09) [9]в [1] все сказано
← →
Rouse_ © (2013-04-05 13:23) [10]
> А ничего что CHAR и WCHAR разного SizeOf?
Смотря в какой дельфи, в 2010 и выше размеры совпадают.
← →
Афонтий (2013-04-12 16:13) [11]StringToWideChar("text",@thbtn.szTip[0],2);
Не работает.
StringToWideChar("text",@thbtn.szTip[0],3);
Не работает.
StringToWideChar("text",@thbtn.szTip[0],4);
Не работает.
StringToWideChar("text",@thbtn.szTip[0],5);
Фигаг! Заработало. И для всех цифр выше работает и результат одинаков. Поясните?
← →
MBo © (2013-04-12 17:22) [12]А не написано ли чего полезного в хелпе по этой функции?
← →
Афонтий (2013-04-12 17:55) [13]Там не написано что если Length(SourceString) равно или больше чем TargetSize, то функция грохается вообще ничего не скопировав...
← →
Германн © (2013-04-12 18:33) [14]
> Афонтий (12.04.13 17:55) [13]
>
> Там не написано что если Length(SourceString) равно или
> больше чем TargetSize, то функция грохается вообще ничего
> не скопировав...
Не написано?
А это что значит:
Source is the string to convert. It must include at most DestSize – 1 characters.
← →
Афонтий (2013-04-18 19:20) [15]хм. Тогда она мне не подходит. Ещё варианты? =(
З.Ы. Дайте мне вашу версию хэлпа?
← →
Германн © (2013-04-18 19:31) [16]
> Дайте мне вашу версию хэлпа?
http://docwiki.embarcadero.com/Libraries/XE2/en/System.StringToWideChar
← →
han_malign (2013-04-19 09:52) [17]
> Там не написано что если Length(SourceString) равно или
> больше чем TargetSize, то функция грохается вообще ничего
> не скопировав...
- наглая ложь... StringToWideChar - как раз для ленивых и неопытных...function StringToWideChar(const Source: string; Dest: PWideChar;
DestSize: Integer): PWideChar;
begin
Dest[WCharFromChar(Dest, DestSize - 1, PChar(Source), Length(Source))] := #0;
Result := Dest;
end;
- а правильный шаблон вызова не
StringToWideChar("text",@thbtn.szTip[0],Random(17));
а
StringToWideChar("text",@thbtn.szTip[0],Length(thbtn.szTip));
← →
brother © (2013-04-19 10:36) [18]вот ведь не хотелписать сюда, но..
[11] как долго нужно думать, чтоб до подобного додуматься?
[15] почему? не можешь длинну рассчитать? Length всегда покажет сколько в попугаях!
Я понимаю, что это в начинающих, но так то зарываться тож нельзя...
Интересно посомтреть ответ автора на [17]
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.02.16;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c