Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1366032117
Cayenne
2013-04-15 17:21
2014.02.16
Ошибка при выгрузке файла


15-1378133550
Степан Потапов
2013-09-02 18:52
2014.02.16
Кто переименовывает, а кто нет? (опрос)


15-1377698945
aka
2013-08-28 18:09
2014.02.16
вопрос знатокам JavaSccript


15-1377900392
картман
2013-08-31 02:06
2014.02.16
широкий монитор...


1-1322047862
Антоха
2011-11-23 15:31
2014.02.16
олучение одномерного массива вариантов из двумерного





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