Передача аргумента командной строки из основной функции в пользовательскую функцию C
Мне нужно передать аргумент командной строки из основной функции (main) в пользовательскую функцию с именем (GetFile): я попробовал это:
Основная функция:
FILE *GetFile(String Extension, String RW);
int main(int argc, char** argv)
{
File *p
char *rootName = argv[1];
p= GetFile( ".name", "r");
if (p)
{ Do some Stuff!! }
return 0;
}
Определяемая пользователем функция:
FILE *GetFile(String Extension, String RW)
{
char Fn[512];
strcpy(Fn, rootName);
strcat(Fn, Extension);
return fopen(Fn, RW);
}
Пользовательская функция берет файл с именем root из Main function.copy его и объединяет с расширением, переданным вызывающей функцией
Как передать значение rootName в функцию GetFile вне моей основной функции. Любая помощь приветствуется
1 ответ
Продолжая комментарии, вы должны быть близки. Вот пример с объявлением и определением функции, приведенным в рабочий пример:
#include <stdio.h>
#include <string.h>
FILE *getfile (char *rn, char *ext, char *rw);
int main (int argc, char **argv)
{
FILE *p;
char *rootname = argc > 1 ? argv[1] : "somefile";
p = getfile (rootname, ".name", "r");
if (p)
printf ("file open for reading!\n");
else
fprintf (stderr, "error: file open failed.\n");
return 0;
}
FILE *getfile (char *rn, char *ext, char *rw)
{
char fn[512] = "";
if (!rn || !*rn || !ext || !*ext || (*rw != 'r' && *rw != 'w')) {
fprintf (stderr, "getfile() error: invalid parameter.\n");
return NULL;
}
strcpy (fn, rn);
strcat (fn, ext);
printf ("opening: %s, filemode: %s\n", fn, rw);
return fopen (fn, rw);
}
Пример файла
$ touch myfile.name
Пример использования / Вывод
$ ./bin/fileopenfn myfile
opening: myfile.name, filemode: r
file open for reading!
Пример с несоответствующим именем файла
$ ./bin/fileopenfn
opening: somefile.name, filemode: r
error: file open failed.
Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.
Примечание: хотя это и не ошибка, стандартный стиль кодирования для C позволяет избежать использования caMelCase
или же MixedCase
имена переменных в пользу всех строчных букв при сохранении заглавных имен для использования с макросами и константами. Это вопрос стиля - так что это полностью зависит от вас. Смотри, например, NASA - C Style Guide, 1994