Andrii
Дык распечатай, что ты передаёшь, открывается, пройди отладчиком, ...
Andrii
Мало ли что может быть, не тот файл указал, где-т натупил, файл только на чтение, прав доступа нету, директория рабочая не та, ...
Jsx707
исполняемй файл и целевой файл в одном каталоге , имя файла передается как аргумент
Jsx707
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int analys(char filename[270]);
int main(int argc, char *argv[]) {
if(argc <= 1) {
printf("Options : --help or --filename for syntax analys\n");
return 0;
}
if(!strcmp(argv[1], "--version")) {
printf("Cobra Engine by sp1cklerboy!\nCurrent Version: 1.0 Beta\n");
} else if(!strcmp(argv[1], "--source")) {
printf("https//github.com//sp1cklerboy/cobra-engine\n");
}
else {
analys(argv[1]);
}
return 0;
}
Jsx707
int analys(const char filename[270]) {
FILE *fp;
fp = fopen(filename , "r");
if(fp == NULL) {
perror("Critical Error");
exit(1);
}
printf("Done!\n");
fclose(fp);
return 0;
}
Jsx707
вот как сейчас это выглядит
Andrii
int analys(const char filename[270]) ну коряво же... Почему не
int analys(const char * filename) ?
Jsx707
щас попробуем , * char это вроде как указатель на адрес в памяти , нет?
Алексей
ᚢᛊᚹᛟᚴᚺ
Алексей
А мне подскажет кто-нибудь?
Борисов
А тебе в личку написали)
Andrii
Jsx707
Это просто указатель.
ну если я передаю теперь как * argv[1] , то он ругается ну и как просто argv[1] , то тоже предупреждение
Jsx707
Как передать?
Jsx707
АА
Jsx707
я передал как &argv[1]
Andrii
Jsx707
скомпилировалось
Andrii
Просто argv[1]
Andrii
Ты просто не можешь передать аргумент, в этом проблема
Andrii
А что говорит отладчик?
Andrii
gcc -O0 -g -ggdb source.c -o app
Andrii
И потом gdb ./app и там b main и r myfile.dat
Jsx707
может просто gcc -g lexer.c -o lexer
Jsx707
/usr/bin/ld: /tmp/ccg8Tmqc.o: in function `main':
/home/ruslan/gl_learning/src/cobra_engine_script/lexer.c:19: undefined reference to `analys'
collect2: error: ld returned 1 exit status
Vladislav
Jsx707
Jsx707
Андрию теперь кошмары сниться будут
Vladislav
https://www.youtube.com/watch?v=Wh22_O8jXVQ
как работает память компьютера, кому интересно
Vladislav
Andrii
Vladislav
Jsx707
а почему тогда компилятор не жаловался.... ладно , я проверю
Vladislav
Vladislav
Та я чет не то сказал, только щас прочитал
Andrii
if(!strcmp(argv[1], "--version")) {
printf("Cobra Engine by sp1cklerboy!\nCurrent Version: 1.0 Beta\n");
} else if(!strcmp(argv[1], "--source")) {
printf("https//github.com//sp1cklerboy/cobra-engine\n");
}
с оптимизацией оптимизатор может посчитать например, что выгоднее проверить первым второе условие, а потом первое. И у тебя программа начнёт выполнятся с третьей строки :)
Andrii
И это немного напрягает
Vladislav
Andrii
А если поставить -O0, то операции будут выполнятся строго в том порядке, в котором написаны
Jsx707
ну я поменял названия функции
Andrii
На практиче ещё хуже,. потому что команды перемешаны: немного от первой строки, потом немного от четвёртой, потом от третей, потом опять от первой, и т. д. И ты вместо ожидаемого 1, 2, 3, 4, получаешь 1, 4, 3, 1, 2, 1, 3, 2, 3, 4
Jsx707
warning: passing argument 1 of ‘analys’ makes pointer from integer without a cast [-Wint-conversion]
19 | analys(*argv[1]);
| ^~~~~~~~
| |
| char
lexer.c:5:26: note: expected ‘const char **’ but argument is of type ‘char’
5 | int analys(const char * filename[270]);
Andrii
ЗАчем звёздочка то?
Jsx707
Andrii
Andrii
Просто [270]
Jsx707
ты про ту которая в параметрах?
Vlad
Привет, ребята. Подскажите, что я не так сделал?
Vlad
Andrii
Danya
что такое cats?
giorgio
это переменная, которую он хочет ввести, но зачем-то выводит
Jsx707
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int analys(const char filename[270]);
int main(int argc, char *argv[]) {
if(argc <= 1) {
printf("Options : --help or --filename for syntax analys\n");
return 0;
}
if(!strcmp(argv[1], "--version")) {
printf("Cobra Engine by sp1cklerboy!\nCurrent Version: 1.0 Beta\n");
} else if(!strcmp(argv[1], "--source")) {
printf("https//github.com//sp1cklerboy/cobra-engine\n");
}
else {
analys(argv[1]);
}
return 0;
}
Vlad
Vlad
Что мне сделать?
Jsx707
и вот второй файл
Andrii
Убери 270
Andrii
Зачем тебе надо 270?
Jsx707
ааа , окей
Jsx707
я просто так писал однажды , работало , но там было немного по другому
Andrii
Можно так int analys(const char filename[]);
Andrii
Просто если ты хочешь принимать массив из 270 символов, то и описуй его в программе и передавай его
Jsx707
я убрал
Vlad
Кто поможет ребята? Просто толчёк, я только начал изучать программирование в академии. Поэтому хочу толчёк
Jsx707
но он все равно говорит всегда , что файла нету
Andrii
char filename[270];
strncmp(filename, argv[1], sizeof(filename);
ananalys(filename)
Jsx707
ага , хорошо
Andrii
ага , хорошо
Это как делать не надо. Лучше просто
`int analys(const char filename[]);`
Andrii
Просто какой-то массив символов произвольной длины