Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

Как правильно запросить имя пользователя?   Найти похожие ветки 

 
Eugem ©   (2006-11-12 01:30) [0]

Не получается запросить имя пользователя в программе.
Делаю так:
GetUserName(buf,lbuf);// получение имени пользователя

Имя пользователя записывается в buf. НО! Как только я пытаюсь обработать переменную buf или вывести её в текстовом виде в Edit-поле, то возникает ошибка при работе функции GetUserName.

Что не так. Подскажите, пожалуйста


 
Leonid Troyanovsky ©   (2006-11-12 02:13) [1]


> Eugem ©   (12.11.06 01:30)  

> Что не так. Подскажите, пожалуйста


А память для buf будет Пушкин выделять.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2006-11-12 12:35) [2]

> Eugem  (12.11.2006 1:30:00)  [0]

Лучше вежливо.
У тебя ошибка в 17 строке.


 
Eugem ©   (2006-11-12 12:51) [3]

procedure TForm1.FormActivate(Sender: TObject);
var name,TT:string;buf:PChar;lbuf,i:cardinal;
begin
    CoolTrayIcon1.IconVisible:=true;
    assignfile(setf,SetFile);
    reset(setf);
    while not(Eof(setf)) do begin  //чтение настроек программы из файла
    readln(setf,name);
    readln(setf,number) end;
    closefile(setf);

    GetUserName(buf,lbuf);// получение имени пользователя
    sbuf:=buf;
    if sbuf="0" then application.Terminate;

    TT:=sbuf[1];

    fname:=name;
    gloA:=0;
    numa:=StrToInt(number);
    gloss:=0;

end;

Вот так написал. Переменную вроде описал, значит память под нее выделяется. Подскажите может по-другому выделять надо?


 
Anatoly Podgoretsky ©   (2006-11-12 12:58) [4]

> Eugem  (12.11.2006 12:51:03)  [3]

В данном коде явных ошибок не наблюдается, но у тебя еще есть код.


 
Anatoly Podgoretsky ©   (2006-11-12 12:59) [5]

> Eugem  (12.11.2006 12:51:03)  [3]

Ой, уродски отформатировано, еще как есть, это Пушкин виноват.


 
Ketmar ©   (2006-11-12 13:05) [6]

>[4] Anatoly Podgoretsky(c) 12-Nov-2006, 12:58
>В данном коде явных ошибок не наблюдается
"как это?" (ц)

var name,TT:string;buf:PChar;lbuf,i:cardinal;
 GetUserName(buf,lbuf);

LVT совершенно верно протелепатировал. а товарищу автору надо в "надмозги", там ему надмозг отполируют.


 
Джо ©   (2006-11-12 13:08) [7]

> Переменную вроде описал, значит память под нее выделяется.

Неверное умозаключение. За разьяснениями, действительно, к Пушкину.


 
Anatoly Podgoretsky ©   (2006-11-12 13:09) [8]

> Ketmar  (12.11.2006 13:05:06)  [6]

Так я уже поправился, я сначал прочитал это как часть параметров. Оформление то кода далеко от идеального.


 
Джо ©   (2006-11-12 13:09) [9]

> Eugem ©

Тип PChar — это указатель на область памяти. Кою необходимо выделить самостоятельно. Например, функциями работы с димнамической памятью.


 
Anatoly Podgoretsky ©   (2006-11-12 13:10) [10]

> Джо  (12.11.2006 13:08:07)  [7]

Правильное, память под Переменную выделена.


 
Ketmar ©   (2006-11-12 13:11) [11]

>[10] Anatoly Podgoretsky(c) 12-Nov-2006, 13:10
>Правильное, память под Переменную выделена.
смени личность, перекинь ветку, а? ведь щаз запинаем беднягу. %-)


 
Джо ©   (2006-11-12 13:12) [12]

> [10] Anatoly Podgoretsky ©   (12.11.06 13:10)
> > Джо  (12.11.2006 13:08:07)  [7]
>
> Правильное, память под Переменную выделена.

Ну, я уже поправился. :)


 
Anatoly Podgoretsky ©   (2006-11-12 13:13) [13]

> Ketmar  (12.11.2006 13:11:11)  [11]

Рано еще. Там же неудобно будет.


 
Ketmar ©   (2006-11-12 13:14) [14]

>[13] Anatoly Podgoretsky(c) 12-Nov-2006, 13:13
>Рано еще. Там же неудобно будет.
что-то я поутру снисходительный. %-)


 
Anatoly Podgoretsky ©   (2006-11-12 13:16) [15]

> Ketmar  (12.11.2006 13:14:14)  [14]

А я с утра уже 5 кб текста на форумы отправил, 15 сообщений.


 
Ketmar ©   (2006-11-12 13:18) [16]

>[15] Anatoly Podgoretsky(c) 12-Nov-2006, 13:16
>А я с утра уже 5 кб текста на форумы отправил, 15 сообщений.
а я матерюсь злобно. без кофию жизни нет.


 
Eugem ©   (2006-11-12 14:21) [17]

TT:=sbuf[1]; - эта строка. Если её нет -код работает нормально, ошибок не возникает.

Как только пытаюсь сделать что-то с buf или sbuf, то возникают ошибки во время выполнения программы. Да, sbuf:string, а buf:PChar.

Помогите, плиз


 
Джо ©   (2006-11-12 14:28) [18]

:-|
Неужели ты ответы не читаешь?


 
Ketmar ©   (2006-11-12 14:30) [19]

>[18] Джо(c) 12-Nov-2006, 14:28
>Неужели ты ответы не читаешь?
нет, видимо. оно не умеет читать, только писать. чукча-программист.


 
Eugem ©   (2006-11-12 15:56) [20]


> нет, видимо. оно не умеет читать, только писать. чукча-программист.

Из того что написали... Кто говорит, что всё правильно. Кто говорит, что нужно выделять память. Напишите как память выделить


 
Ketmar ©   (2006-11-12 15:58) [21]

>[20] Eugem(c) 12-Nov-2006, 15:56
>Напишите как память выделить
вот здесь помогут: http://antigreen.org/bioreactor/

зыж quousque tandem?!!


 
MikePetrichenko ©   (2006-11-12 17:07) [22]

var
 Buf: array [0..254] of Char;
 BufSize: DWORD;
begin
 BufSize := 255;
 FillChar(Buf, BufSize, 0);
 GetUserName(Buf, BufSize);
 ....
end;


 
Eugem ©   (2006-11-12 17:28) [23]

Я вот так написал:
new(buf);
    GetUserName(buf,lbuf);// получение имени пользователя
    sbuf:=buf;


 
MikePetrichenko ©   (2006-11-12 17:40) [24]


> new(buf);

new для PChar??? Оригинально. А размер кто указывать будет, сколько того new нужно выделить?


 
Dmitrij_K   (2006-11-12 17:42) [25]

Для Pchar есть StrAlloc StrDispoce


 
MikePetrichenko ©   (2006-11-12 17:43) [26]


> Для Pchar есть StrAlloc StrDispoce

Для PChar и всего отсального (кроме типизированных указателей на записи, для которых подойдет New) есть GetMem, FreeMem, HeapAlloc, MemAlloc и т.п.
Рекомендую использовать native API функции управления памятью, так как меньше гемороя будет в будущем.


 
MikePetrichenko ©   (2006-11-12 17:46) [27]

А вообще, по-моему глупо использовать функции выделения/освобождения памяти для переменных, которые используются исключительно внутри функции и имеют сравнительно не большой фиксированный размер. Проще (и надежнее) обойтись обычным статическим массивом в стеке (локальная переменная функции).


 
Anatoly Podgoretsky ©   (2006-11-12 19:05) [28]

> MikePetrichenko  (12.11.2006 17:40:24)  [24]

Ничего оригинального, под PChar и выделит


 
Anatoly Podgoretsky ©   (2006-11-12 19:06) [29]

> MikePetrichenko  (12.11.2006 17:46:27)  [27]

Глупо вообще использовать массив, string полностью совместим с PChar


 
guav ©   (2006-11-12 19:17) [30]

Всё уже сказано, можно только добавить, сколько требуется выделить:
A buffer size of (UNLEN + 1) characters will hold the maximum length user name including the terminating null character. UNLEN is defined in Lmcons.h.
Из Jwa:
 UNLEN      = 256; // Maximum user name length


Напонмило.
http://www.delphimaster.ru/cgi-bin/nuts.pl?showpage=2
ветка Имя компьютера


 
MikePetrichenko ©   (2006-11-13 00:43) [31]


> Глупо вообще использовать массив, string полностью совместим
> с PChar

Тоже вариант. Но потребует явного задания длинны строки SetLength для передачи в GetUserName


 
guav ©   (2006-11-13 00:57) [32]

> [31] MikePetrichenko ©   (13.11.06 00:43)
> Но потребует явного задания длинны строки SetLength

"...а мне это не интересно! Просьба подсказать другие варианты." (с) Орешник

Это лучший вариант, string используется повеместно и работать с ним в отличии от массива удобно, вот и получать надо сразу в string.


 
Ketmar ©   (2006-11-13 00:59) [33]

>[32] guav(c) 13-Nov-2006, 00:57
>надо сразу в string.
а я всё по-привычке в массивы получаю. %-)


 
MikePetrichenko ©   (2006-11-13 01:00) [34]


> Это лучший вариант, string используется повеместно и работать
> с ним в отличии от массива удобно, вот и получать надо сразу
> в string.

Не спорю. Возможно не лучший (зависит от контекста программы), но уж 100% ясный и простой.


 
MikePetrichenko ©   (2006-11-13 01:02) [35]


> а я всё по-привычке в массивы получаю. %-)

та ну! Как ни странно, я тоже. Видимо это старость :(


 
Ketmar ©   (2006-11-13 01:36) [36]

>[35] MikePetrichenko(c) 13-Nov-2006, 01:02
>та ну! Как ни странно, я тоже. Видимо это старость :(
а за углом поджидает злой маразм. эх, не бывать нам как ЮЗ, ИШ, АП...


 
MikePetrichenko ©   (2006-11-13 02:49) [37]


> Как правильно запросить имя пользователя?

И всетаки, IMHO, лучше подойти и вежливо спросить "Как Вас зовут?"


 
Ketmar ©   (2006-11-13 02:52) [38]

>[37] MikePetrichenko(c) 13-Nov-2006, 02:49
>И всетаки, IMHO, лучше подойти и вежливо спросить "Как Вас
>зовут?"
не забывая, что доброе слово и пистолет намного более действенны, нежели просто доброе слово.


 
Anatoly Podgoretsky ©   (2006-11-13 07:38) [39]

> MikePetrichenko  (13.11.2006 0:43:31)  [31]

А в массиве разве не надо явного задания длины, при том два раза



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.067 c
1-1161170320
Виталий Панасенко
2006-10-18 15:18
2006.12.03
Вставка в таблицу Excel формулы


8-1145366338
mobila
2006-04-18 17:18
2006.12.03
Копирование на Image2


15-1163708207
Yeg
2006-11-16 23:16
2006.12.03
PowerPoint и звуковой файл


6-1152017480
Интересующийся
2006-07-04 16:51
2006.12.03
Проблемы c TIdTCPServer и TIdTCPClient


15-1163586466
YOjik
2006-11-15 13:27
2006.12.03
Загадка