Имя: Пароль:
1C
1С v8
WinAPI работа с wchar_t
0 men47
 
10.06.14
21:08
Подскажите, а то что-то туплю.....

есть

wchar_t *a1="Hello";
wchar_t a2[200];

нужно закинуть из a1 в a2,
пытаюсь сделать через
wcscat(a2, a1);
ошибка
wcscpy(a2, a1);
тоже ошибка....

подскажите, как правильно будет "сложение" строк
1 quest
 
10.06.14
21:13
Правильно так -

(defparameter *a1* "Hello")
(defparameter *a2* "world")

(concatenate 'string *a1* " " *a2*)
2 men47
 
10.06.14
21:14
(1)Правильно ли я вас понял

wchar_t *a1="Hello";
wchar_t a2[200];

(defparameter *a1* "Hello")
(defparameter *a2* "world")

(concatenate 'string *a1* " " *a2*)
3 men47
 
10.06.14
21:15
(1) мне просто нужно работать именно с wchar_t
4 men47
 
10.06.14
21:39
(1) либо я не так делаю, либо я не знаю, т.к. прога пишет не известный индентификатор на defparameter
5 H A D G E H O G s
 
10.06.14
21:40
Правильней будет установить Delphi 2010 и забыть секас с C++ строками как страшный сон.
6 men47
 
10.06.14
21:42
(5) Если бы было все так просто, я б в 1с сделал=))) но нужно именно в WinAPI сделать....
7 H A D G E H O G s
 
10.06.14
21:46
(6) Дельфи работает с WinAPI только влет. И stdcall вызовы поддерживает и обертки на весь экспортный свежак есть.
8 H A D G E H O G s
 
10.06.14
21:48
А если чего-то нет - пишем импорт, хоть в статике, хоть в динамике в виде процедуры - заготовки (не помню как называется).
9 Кирпич
 
10.06.14
21:50
(5) а скока стоит delphi 2010?
10 men47
 
10.06.14
21:53
(8) мне именно в с++ нужно=))
11 H A D G E H O G s
 
10.06.14
21:54
(9) Я уж и не помню. Порядка штуки баксов. Ее может позволить себе каждый 1Снег.
12 men47
 
10.06.14
21:56
ехехе.... что мне так и никто не поможет с Char'ками=((
13 Кирпич
 
10.06.14
21:58
(12) http://www.cplusplus.com тебе поможет
14 Кирпич
 
10.06.14
21:59
(11) денег жалко. Лучше даром lazarus, а штуку честно пропить.
15 men47
 
10.06.14
22:00
(13) Т_Т
16 Кирпич
 
10.06.14
22:03
(15) это чо?
17 men47
 
10.06.14
22:05
(16) это пичаль..
18 Кирпич
 
10.06.14
22:06
(17) интернета нету. Понимаю. Не где посмотреть.
19 Эмбеддер
 
10.06.14
22:08
а что wcscpy(a2, a1) падает? я всегда так делал
20 men47
 
10.06.14
22:10
(19) да.... падает=((
21 Эмбеддер
 
10.06.14
22:13
а если так (хотя там ноль в конце и так должен быть)
wchar_t *a1=L"Hello\0";
22 men47
 
10.06.14
22:14
(21) нет...
23 Эмбеддер
 
10.06.14
22:16
похоже проблема в чем-то другом, вот пример, там все так же
http://www.cplusplus.com/reference/cwchar/wcscpy/
24 xReason
 
10.06.14
22:19
в swift такого безобразия нету
25 Эмбеддер
 
10.06.14
22:20
по-моему упасть может только если сделать так

wchar_t a1[100]=L"Hello";
wchar_t a2[200];

wcscpy(a2, a1);

потому что в 1-й строке не будет завершаюшего нуля, когда инициализируем массив, а не указатель на строку
26 Кирпич
 
10.06.14
22:24
У меня работает

nt _tmain(int argc, _TCHAR* argv[])
{
    wchar_t *a1 = L"Hello ";
    wchar_t a2[200] = L"";
    wcscat(a2,a1);
    wcscat(a2,L"World!");
    wprintf(a2);
    return 0;
}
27 men47
 
10.06.14
22:27
(23) так ну нашел в чем проблема

wcscpy_s(a2, a1);

но, проблема небольшая осталась

у меня тут просто цикл, определяется а1 каждый раз новый, и мне нужно сложить, что определилось в а2

т.е. например

wchar_t *a1="Hello";
wchar_t *a3 = "world";
wchar_t a2[200];
wcscpy_s(a2, a1);
wcscpy_s(a2, a3);


но почему-то он выдает в a2 "world", а не  "Hello world"
28 Кирпич
 
10.06.14
22:31
(27) ты определись, копируешь или соединяешь
29 men47
 
10.06.14
22:32
(26) если я строю через

wcscat_s(а2, а1);

выдает ошибку

Microsoft Visual C++ Runtime Library

Debug Assertion Faild!
бла бла бла.....
Line:32

Expression: (L "String os not null terminated" && 0)
бла бла бла
30 Кирпич
 
10.06.14
22:34
(29) издеваешься? Я тебе уже написал как правильно. И не только я.
31 Кирпич
 
10.06.14
22:35
A2 надо инициализировать. Нолик туда запихнуть.
32 men47
 
10.06.14
22:39
(31) блин=))) спасибо
33 Эмбеддер
 
11.06.14
05:56
а вообще надо так
wcscpy_s(a2, a1);
wcscat_s(a2, a3);
34 ADirks
 
11.06.14
06:50
(5) В C++ строки нормальные. Это в mfc за 20 лет так и не смогли написать нормальной работы со строками. Ушлёпки. Десять версий строковых типов, и 377 версий разных функций для работы с разными типами. "wcscpy_s:  Copy a string. These are versions of strcpy, wcscpy, _mbscpy with security enhancements"  - китайцы там плотно окопались, ага.

кстати, про конкатенацию. у нормальных перцев это выглядело бы примерно так:
char dest[100];
char* ptr = dest;
ptr = strcpy(ptr, a1);
ptr = strcpy(ptr, a3);
...
35 oleg_km
 
11.06.14
09:27
В 10-м рантайме вроде есть класс по работе со строками, там по-моему есть append и все такое. У дочери недавно читал в учебнике
36 H A D G E H O G s
 
11.06.14
12:01
(34) C++ просто прекрасен в плане работы со строками, когда ты понимаешь что такое shortstring, null terminated string, widestring, ansistring, array of char, умеешь работать с указателями, параметрами функций по значению или по ссылке, и понимаешь их.

C++ просто прекрасен для челов, проработавших несколько лет с ЯП класса C++, именно для поддержания мозга в тонусе, Специальная такая олимпиада.

Для нубов он говнянен. Для нубов - Дельфя.

Теперь вопрос - спец, взращенный на Дельфе - перейдет ли на гейтсо мерский C++ (пусть будет даже от Embarcadero) добровольно? Дурных - нема. Максимум будут извращенцы типа меня в варианте "а давай попробую". Попробуют, посмотрят на C++ как-то недовольно, свирепо и в то же время грустно и с недоумением и снесут ее накер.
37 oleg_km
 
11.06.14
12:25
(37) Какой смысл обсуждать С++? Дельфи развивается и С++ в исполнении MS превратилось в C#. Я тоже помню как на турбо паскале нужно было заботиться о выделении памяти, отслеживать границы сегментов и пр.
38 Кирпич
 
11.06.14
12:26
Каждый москаль любит паскаль! Хохлы уси пишуть на си!
39 H A D G E H O G s
 
11.06.14
12:28
(38) Браво!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.