Почему в Си после main() не ставят ;?
;
между объявлением и телом функции, не только для main
, но и для любой другой функции. Согласно стандарту языка, например С99 приводит следующий синтаксис определения функции:function-definition:
declaration-specifiers declarator declaration-list<opt> compound-statement
declaration-list:
declaration
declaration-list declaration
extern int max(a, b)
int a, b;
{
return a > b ? a : b;
}
;
.эта строка работает на другом языке?
Почему
Serial.println
печатает то, что ты передаёшь ей на вход, а ты передаёшь ей на вход values[0][0]
-- это один символ, '8'.как это решить?
0xe918
-- 16-битное число. Если это симовл unicode в кодировке utf-8, то его байты должны идти как отдельные символы. Если ты собираешься печатать отдельные байты закодированных utf-8 символов, то не нужно делать этого функцией println
, потому что она вставит символ конца строки после печати каждого символа.unsigned int values[][6] = {
{0xE918, 0x14, 0xE918, 0x49, 0xE918, 0x48}
};
…
Serial.println(values[0][0], HEX);
Соответственно, мне нужно конвертировать массив wchar_t в массив char перед шифрованием, а после дешифровки выполнять обратную конвертацию.
Я поменял сигнатуру функции main() на int main(int argc, wchar_t* argv[]) (пытался исправлять на wmain, но тогда ругается ld и сборка падает с ошибкой).
int main(void)
, int main(int argc, char *argv[])
или эквивалентным. Там же написано, что набор символов во время выполнения программы -- implementation defined, поэтому нет гарантии, что их можно обработать кросплатформенно.Для конвертации wchar_t* в char* я пробовал использовать функцию wcstombs, однако почему-то у меня она совершенно не работает (при попытке преобразовать строку, содержащую только латиницу, я получаю null).
wcstombs
не занимается выделением памяти, если ты "получаешь null" -- это происходит в каком-то другом месте. Ну и если ты это делаешь внутри main принимающего wchar_t* argv[]
, то твой код интерпретирует строку char
как строку wchar_t
, что добавляет хаоса. Но в режиме отладки всё, как я уже писал выше, работает.
$ gcc -std=c99 -O2 -g3 -fsanitize=address main.c acp.c md5.c -o main
$ ./main
Base64('Hello') = "SGVsbG8="
MD5('Hello') = "8b1a9953c4611296a827abf8c47804d7"
=================================================================
==1045705==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x604000000071 at pc 0x7fb0d46486f8 bp 0x7ffd0affb580 sp 0x7ffd0affad30
WRITE of size 33 at 0x604000000071 thread T0
#0 0x7fb0d46486f7 in __interceptor_strcat ../../../../src/libsanitizer/asan/asan_interceptors.cpp:377
#1 0x564b2388c0de in prepareKeys /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/acp.c:263
#2 0x564b2388cac4 in acraw /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/acp.c:319
#3 0x564b2388d8c2 in acraws /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/acp.c:401
#4 0x564b2388d8c2 in acraws_basic /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/acp.c:409
#5 0x564b2388a62e in testSimpleEncryption /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/main.c:20
#6 0x564b2388a368 in main /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/main.c:111
#7 0x7fb0d44461c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#8 0x7fb0d4446284 in __libc_start_main_impl ../csu/libc-start.c:360
#9 0x564b2388a440 in _start (/home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/main+0x3440)
0x604000000071 is located 0 bytes to the right of 33-byte region [0x604000000050,0x604000000071)
allocated by thread T0 here:
#0 0x7fb0d46b89cf in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x564b2388fee7 in md5StringHash /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/md5.c:227
что не так
mov ecx, 5 ; Загружает количество гласных
…
inc ecx ; Увеличивает счетчик гласных
…
loop checkVowels ; Переходит к проверке следующей гласной
…
test ecx, ecx ; Проверяет, содержится ли гласная буква в слове
правильно ли, что на программаторе уже замкнуты контакты?
Может ли язык Си работать на условной стековой машине? … В виде стековой машины я имею в виду условную машину Тьюринга
Будут ли какие-то проблемы для генерации кода из Си в ассемблер для подобной машины?
В оригинальном ядре linux есть несвободные прошивка и блобы
какое ядро всё-таки использует Debian ?
У меня имеется список исходных файлов и список файлов в которые они должны быть скомпилированы.
SRCS = ./a/prog1.c ./a/b/prog2.c ./a/b/c/prog3.c
OUTS = ./outs/prog1.out ./outs/prog2.out ./outs/prog3.out
.PHONY: all
SRCS = ./a/prog1.c ./a/b/prog2.c ./a/b/c/prog3.c
OUTS = ./outs/prog1.out ./outs/prog2.out ./outs/prog3.out
all: $(OUTS)
define make_rule =
$(firstword $(1)): $(firstword $(2))
@echo compile $$< to $$@
gcc $$< -o $$@
$(if $(wordlist 2,$(words $(1)),$(1)),
$(eval $(call make_rule,
$(wordlist 2,$(words $(1)),$(1)),
$(wordlist 2,$(words $(2)),$(2)))))
endef
$(eval $(call make_rule,$(OUTS),$(SRCS)))
ctypes.restype(outdata)
, где outdata
-- тип rez1
, см), либо переделать функцию так, чтобы она не требовала скрытого параметра (например, добавив явный указатель на результат в список параметров, см). Обычно RISC процессоры строят по Гарвардской архитектуре, а CISC - по архитектуре фон Неймана. Бывают другие варианты?
Если права на файл не go-rwx
go-rwx
, эта запись означает "отнять rwx у g и o". Разрешения могут быть u=rw,go=
. Получить их можно например так: stat -c %A /etc/shadow
, а проверить условие -- командой test, например: if [ `stat -c %A /etc/shadow` != "-rw-------" ]
, или командой grep, например: if ! stat -c %A /etc/shadow | grep -q '^....------$'
.chmod go-rwx /etc/shadow
. D:\ N E W\ 1637\ 1\Talking LED Alarm Clock Using TM1637 LED Module\Code/Code.ino:91: undefined reference to `sp3_THE' D:\ N E W\ 1637\ 1\Talking LED Alarm Clock Using TM1637 LED Module\Code/Code.ino:91: undefined reference to `sp3_THE' D:\ N E W\ 1637\ 1\Talking LED Alarm Clock Using TM1637 LED Module\Code/Code.ino:92: undefined reference to `sp3_TIME'
В чему может быть проблема ?
Почему ls не работает
./main `pwd`/mntpoint
) -- то становится лучше. Но всё ещё не работает, потому что при использовании обработчиком запроса на доступ к каталогу этого же самого каталога происходит бесконечная рекурсия и исходный запрос не завершается.Есть, может, какие-то специальные книги по этой теме?