C로 된 Linux 프로그램을 DOS로 변환하려고합니다. DOS 명령 줄에서 128 바이트 만 허용하므로 파일에서 인수를 읽으려고합니다. 이 파일은 각 인수마다 한 행씩 있습니다.파일에서 * argv [] 배열로 읽기
그래서 파일의 인수를 문자열 배열로 읽어 들여 * 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'는 고정 된 크기를 가지고 있고, 같은 수의 바이트를 제공하지 않으면 프로그램이 깨질 수 있습니다 ... –
왜 널 포인터를 주조합니까? 그건 불필요한 일입니다. – Sebivor