Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
ВнизНе работает пример. В чем ошибка ? Найти похожие ветки
← →
Roxtady (2002-08-22 17:42) [0]Есть такой код
//P1 типа PChar, присваиваем ему значение
P1:="x=";
//Копируем значение x в P2 типа PChar, x:integer
wvsprintf(P2,"%i",@x);
//Склеиваем P1 и P2. P1 получается что-то типа "x=45"
P1:=lStrCat(P1,P2);
//Прибавляем к P1 "y=". P1 получается что-то типа "x=45 y="
P1:=lStrCat(P1," y=");
//Копируем y в P2. И вот тут ошибка. Если даже y=35, то по идее
//P2 должно стать "35". Но оно становится что-то вроде
//" y=". ОТКУДА ТАКОЕ ?
wvsprintf(P2,"%i",@y);
//Ну этот код скрепляет P1 и P2. И P1 должен стать по идее
//что-то типа "x=45 y=50"
//Но из-за ошибки естественно не работает...
P1:=lStrCat(P1,P2);
← →
Jeer (2002-08-22 18:19) [1]Не майся, а займись вот этим:
procedure FmtStr(var StrResult: string; const Format: string; const Args: array of const);
function Format(const Format: string; const Args: array of const): string;
← →
Roxtady (2002-08-22 19:15) [2]Блин. Ну я же говорю. Это ведь конференция, посвященная программированию на WINAPI ! А fmtstr - функция из sysutils.
ПОЖАЛУЙСТА, разберитесь в примере. Я понимаю, что там все замудрено, если что непонятно - спрашивайте.
← →
Ученик (2002-08-22 19:25) [3]var
P1, P2 : array[0..255] of char;
x, y : Integer;
begin
x := 6; y := 10;
lstrcpy(p1, "x=");
//Копируем значение x в P2 типа PChar, x:integer
wvsprintf(P2,"%i",@x);
//Склеиваем P1 и P2. P1 получается что-то типа "x=45"
lStrCat(P1,P2);
//Прибавляем к P1 "y=". P1 получается что-то типа "x=45 y="
lStrCat(P1," y=");
//Копируем y в P2. И вот тут ошибка. Если даже y=35, то по идее
//P2 должно стать "35". Но оно становится что-то вроде
//" y=". ОТКУДА ТАКОЕ ?
wvsprintf(P2,"%i",@y);
//Ну этот код скрепляет P1 и P2. И P1 должен стать по идее
//что-то типа "x=45 y=50"
//Но из-за ошибки естественно не работает...
lStrCat(P1,P2);
MessageBox(0, P1, "Info", MB_OK)
← →
Jeer (2002-08-22 19:30) [4]Вот и я, блин, думаю - чего человек мучается ?
Борланд не зря ввел свое понятие String - тебе же легче.
Работа со строками в C и с PChar в Дельфи это прежде всего -постоянная забота о РАЗМЕРЕ буфера (ов).
Вот и подумай, откуда ноги растут.
← →
Roxtady (2002-08-22 23:50) [5]Ученик, то есть, ошибка только в том, что у тебя P1 и P2 это array of char, а у меня P1 и P2 типа PChar ?
Чего то я не понимаю... почему так ?
← →
Ученик (2002-08-22 23:53) [6]Ну, не только в этом, но это основная
← →
Eugen Honeker (2002-08-23 02:08) [7]Roxtady, вот тебе аналог на WinApi
function format(buffer: pchar; const format: pchar; argument: array of const): integer;
var
n: integer;
p,tmp: PDWORD;
begin
result:= 0;
n:= length(argument);
if (n = 0) then exit;
getmem(tmp, n * sizeof(Pointer));
p:= tmp;
for n:= 0 to (n-1) do
begin
p^:= PDWORD(@argument[n])^;
inc(p);
end;
result:= wvsprintf(buffer, format, pointer(tmp));
freemem(tmp);
end;
← →
Игорь Шевченко (2002-08-23 11:28) [8]Извращенцы...
← →
Roxtady (2002-08-23 11:53) [9]Ученик © (22.08.02 23:53)
Ну, не только в этом, но это основная
А какие ЕЩЕ ошибки ? Я различий больше не нашел...
И почему array of char ? Ведь при описании WinApi функций написано, что нужно пользоваться PChar. Странно...
Игорь Шевченко, ох. Как я понимаю, вы знаеет решение проблемы, но не хотите ее говорить. Ну поделитесь пожалуйста вашим мнением...
← →
ZrenBy (2002-08-23 11:58) [10]>>Roxtady
Нужно как "Отче наш" вызубрить, что
PChar - это указатель и если ты хочешь туда чего-то писать,
то будь добр выделить необходимую память.
← →
Игорь Шевченко (2002-08-23 12:08) [11]Угу. Я знаю решение (только, плз, без обид) - прежде чем чего-то сделать, надо это что-то изучить, литературу почитать, к примеру. Если что-то не получается в программе, надо отладчик использовать и так далее.
Рекомендую почитать:
http://ln.com.ua/~openxs/articles/smart-questions-ru.html
← →
Roxtady (2002-08-23 15:42) [12]Вы случайно не про GetMem, FreeMem ? Все это делается, просто в приведенном коде это опущено, это вырезка из программы. Так в чем тогда может быть дело ? Неужели нельзя использовать PChar, а надо использовать array of char ?
P.S. Модератору. Я здесь новичок и, наверное, многого не понимаю. Можно объяснить, почему эта ветка не подходит под конференцию WinApi ? Ведь я хочу написать свою программу только на WinApi...
← →
Roxtady (2002-08-23 22:39) [13]Откликнетесь кто-нибудь ! Неужели нельзя использовать PChar ? Зачем тогда был введен такой тип переменных ?
← →
Roxtady (2002-08-24 13:46) [14]ZrenBy, ау !
Мастера, откликнетесь ! Помогите кто-нибудь. Разъясните ситуацию, а то я не понимаю ни фига...
← →
Roxtady (2002-08-24 14:10) [15]Ученик
Если заменить Pchar на array of char то:
P1:=lStrCat(P1,P2);
//ошибка Incompatible types: "Array" and "Pchar"
← →
I__am (2002-08-24 14:14) [16]Я тож с Pcar"ом мучался долго пока не поменял на String
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c