Я пытаюсь преобразовать программу Linux на C в DOS. Поскольку командная строка DOS допускает только 128 байт, я пытаюсь прочитать аргументы из файла. В этом файле есть по одной строке для каждого аргумента.
Поэтому я читаю аргументы из файла в массив строк и хочу переопределить адрес * argv [] адресом моего массива строк.
Но я путаюсь с указателями на указатели. Что мне сделать, чтобы правильно переопределить адрес *argv[] в моей функции?
Эта программа вызывается с помощью «argvtest.exe commands.dat».
Вот мой тестовый код:
#include <stdio.h>
#include <string.h>
void read_cmd_file(int *argc,char *argv[]){
if (*argc != 2 ) return;
char buf[256];
char arguments[30][256];
int line_nr=0,i;
FILE *fp=(FILE *) NULL;
/* open the file */
fp=fopen(argv[1],"r");
if (fp == (FILE *) NULL)
{
printf("Could not open command file: %s",argv[1]);
return;
}
while (fgets(buf,sizeof(buf)-1,fp) && !feof(fp))
{
line_nr++;
strcpy(arguments[line_nr],buf);
//printf("Argument read: %s\n",buf);
}
if (fp != (FILE *) NULL)
(void) fclose(fp);
for (i=1;i<=line_nr;i++) printf("%d,%s\n",i,arguments[i]);
*argv=&arguments[0][0];
*argc=line_nr;
return;
}
int main(int argc,char **argv)
{
int i;
read_cmd_file(&argc,argv);
printf("argc=%d\n",argc);
for (i=0;i<argc;i++) printf("%d,%s\n",i,argv[i]);
}
argv
имеет фиксированный размер, и если вы не предоставите равное количество байтов, ваша программа может сломаться... - person bash.d   schedule 07.04.2013