Помогите новичку
-
Кроме как при помощи ф70.5 можно проверить существование файла? А то не хочется как то, выделять память под всю структуру.to infinity and beyond
Если включить воображение:punk_joker wrote:Кроме как при помощи ф70.5 можно проверить существование файла? А то не хочется как то, выделять память под всю структуру.
Spoiler:
ф.70.1* +12 = +0xC: dword: сколько байт читать, 1 байт.
З.Ы. Только для файлов, не для директорий.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Дело в том, что мне необходимы вариант как для файлов, так и для папок.Mario_r4 wrote:ф.70.1
* +12 = +0xC: dword: сколько байт читать, 1 байт.
З.Ы. Только для файлов, не для директорий.
to infinity and beyond
Это суровый метод апостола Фомы.Mario_r4 wrote:Если включить воображение:
Структура маленькая, выделяй место в стеке и не мучайся ненужными сомнениями.punk_joker wrote:А то не хочется как то, выделять память под всю структуру
Для файлов ф.70.0 же.Mario_r4 wrote:ф.70.1
* +12 = +0xC: dword: сколько байт читать, 1 байт.
З.Ы. Только для файлов, не для директорий.
Тебе жалко 40 байт?punk_joker wrote:не хочется как то, выделять память под всю структуру.
В зависимости от задачи можно использовать всегда один и тот же буфер, не выделяя каждый раз новый. Но в этом случае в многопоточном приложении нужно следить, чтобы с этим буфером не пытались работать одновременно несколько потоков — использовать средства синхронизации.
Поэтому ф70.5.punk_joker wrote:мне необходимы вариант как для файлов, так и для папок.
Было в одном из файлов SHELL, поиск первого вхождения символа
Мне понадобилась похожая функция, только поиск не первого, а последнего вхождения символа. Набыдлогодил по быстрому, основываясь на предыдущем примере:
Рабатает, но выдаёт ворнинги:
Почему и как исправить?
Code: Select all
char* strchr(const char* string, int c)
{
while (*string)
{
if (*string==c)
return (char*)string;
string++;
}
return (char*)0;
}
Code: Select all
char* strrchr(const char* string, int c)
{
int last_found;
while (*string)
{
if (*string==c)
{
last_found = string;
}
string++;
}
return (char*)last_found;
}
Code: Select all
system/string.c: In function 'strrchr':
system/string.c:133:15: warning: assignment makes integer from pointer without a
cast [enabled by default]
last_found = string;
Из хаоса в космос
вероятно надо:
char* last_found;
...
last_found = (char*)string;
...
return last_found;
char* last_found;
...
last_found = (char*)string;
...
return last_found;
Черт побери! А ты прав!0CodErr wrote:Для файлов ф.70.0 же.
Вот что бывает, когда пытаешься и на работе работать и тут подрабатывать.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Ну, мы тут все в чем то монахи, блин. В то время как космические корабли бороздят просторы больших театров...Serge wrote:Это суровый метод апостола Фомы.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
char* - это указатель? В С-- указатель я использую dword, возможно это и неправильно.lev wrote:вероятно надо:
char* last_found;
...
last_found = (char*)string;
...
return last_found;
(char*) - что значит эта конструкция?
return last_found; - почему в конче просто last_found?
Из хаоса в космос
(char*) var = преобразовать var к (char *), т.е. к указателю на char.
Если объявить last_found как char *, то преобразование типов не нужно будет.
Т.е.
char* last_found;
...
last_found = string;
...
return last_found;
Т.е.
char* last_found;
...
last_found = string;
...
return last_found;
Оказывается нужно, т.к. const char* и char*Insolor wrote:Если объявить last_found как char *, то преобразование типов не нужно будет.
Т.е.
char* last_found;
...
last_found = string;
...
return last_found;
Из хаоса в космос
Ок, только не "т.к. const char* и char*" (это ни о чем мне не говорит), а "warning: assignment discards qualifiers from pointer target type". Так что да, приведение все-таки нужно.Leency wrote:Оказывается нужно, т.к. const char* и char*Insolor wrote:Если объявить last_found как char *, то преобразование типов не нужно будет.
Т.е.
char* last_found;
...
last_found = string;
...
return last_found;
Указатели на указатели - многочисленное перенаправление
Такой вопрос. У меня, к примеру, в переменной var лежит число 5. Я сделал указатель на var, _var, а потом указатель на _var, __var. Как мне быстро узнать значение var, используя __var? Приходится использовать такой код:
А хотелось бы что нибудь вроде
Для чего мне это нужно? Для куч.
Есть ли способ?
Такой вопрос. У меня, к примеру, в переменной var лежит число 5. Я сделал указатель на var, _var, а потом указатель на _var, __var. Как мне быстро узнать значение var, используя __var? Приходится использовать такой код:
Code: Select all
mov eax, [__var]
dpd [eax]
Code: Select all
dpd [ [_var] ]
Code: Select all
use32
org 0x0
;---------------------------------------------------------------------
db 'MENUET01'
dd 0x01, __START, __END, 0x1000, 0x1000, 0x0, 0x0
;---------------------------------------------------------------------
include 'macros.inc'
include 'debug.inc'
;=====================================================================
__START:
;=====================================================================
init_heap:
mcall 68, 11
cmp eax, 0
je exit
mov ecx, 4
add ecx, 4
add ecx, 1024
mcall 68, 12
mov [buff.x], eax
add eax, 4
mov [buff.y], eax
;---------------------------------------------------------------------
main:
mov eax, [buff.x]
mov [eax], 10
add eax, 4
mov [eax], 20
; ... ...
;---------------------------------------------------------------------
exit:
mcall 68, 13, [buff]
mcall -1
;---------------------------------------------------------------------
buff:
.x rd 0
.y rd 0
;=====================================================================
__END:
;=====================================================================
Last edited by e-andrew on Thu Oct 10, 2013 4:31 pm, edited 1 time in total.
Who is online
Users browsing this forum: No registered users and 32 guests