簡體   English   中英

無法讀取文件並傳遞給參數

[英]Unable to read a file and pass into arguments

1)我試圖打開一個文件,讀取混合數據(整數,字符和字符串)並將其存儲到參數中。

1.1),因此sample.txt中的總數為13(不包括args [0])

2)需要從終端“ ./myprog.c <sample.txt”讀取文件

這是我的代碼,不知道我哪里出錯了:

sample.txt:
123 213 110 90 1
hello my friend
boo bleh
a b c

myprog.c:

#include <stdio.h>
int main()
{
        int i = 1;
        FILE *fstin=fopen(argv[0], "r"); //open the file
        if (fstin == NULL) {
            puts("Couldn't fopen..."); 
            return -1;
        }
         //Getting all the inputs from file
        while ((fscanf(fstin, "%d", argv[i])) != EOF){
            i++;
        }

        fclose(fstin);
        for (i=0; i<10; i++) {
            printf("%d\n",argv[i]);
        }

        return 0;
}

任何幫助是極大的贊賞!

PS:是否有人可以發布完整的解決方案? 將上傳到此帖子,並讓所有人對此問題進行評論

PPS:請原諒我的編碼水平不高,因為我是初學者,並且對C完全陌生。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int ac, char *av[]){
    int i, argc=0;
    char **argv=NULL, data[16];
    FILE *fstin = stdin;

    if(ac == 2){
        if(NULL==(fstin = fopen(av[1], "r"))){
            puts("Couldn't fopen...");
            return -1;
        }
    }
    while (1==fscanf(fstin, "%15s", data)){
        argv = realloc(argv, (argc+1)*sizeof(char*));
        argv[argc] = malloc(strlen(data)+1);
        strcpy(argv[argc++], data);
    }
    if(ac == 2)
        fclose(fstin);

    for (i=0; i<argc; ++i) {
        printf("%s\n", argv[i]);
    }
    //deallocate
    return 0;
}

您在將文件轉移到其他錯誤的第二點時出錯。 實際上,您需要首先編譯並需要使可執行文件。

gcc -o my_prog ./myprog.c -Wall

您需要執行以下程序以從c程序讀取文件:

./my_prog ./sample.txt

當您不熟悉C編程時,首先進入與文件操作相關的手冊頁。

解:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {

   //If command line argument is not inserted then stop operation
   if (2 !=  argc) {
      printf("Invalid number of arguments : %d\n", argc);
      return -1;
   }
   int size = 0, ret = 0;
   char *data = NULL;
   FILE *fp = NULL;

   //Open file in read mode given from command line argument
   if (NULL != (fp = fopen(argv[1], "r")))
   {
      //Find size of file
      fseek(fp, 0L, SEEK_END);
      size = ftell(fp);
      fseek(fp, 0L, SEEK_SET);
      //if file is empty no need to read it.
      if (size > 0)
      {
         //Data pointer which contains file information
         data = (char *) calloc(sizeof(char), size);
         if (NULL != data)
         {
            //Read whole file in one statement
            fread(data, sizeof(char), size, fp);

            printf("File %s is readed successfully\n", argv[1]);
            printf("Data:\n");
            printf("%s\n", data);
            free(data); data = NULL;
         }
         else
         {
            perror("memory allocation failed\n");
            ret = -1;
         }
      }
      else
      {
         printf("File %s is empty\n", argv[1]);
      }
      fclose(fp); fp = NULL;
   }
   else
   {
      perror("File open failed\n");
      ret = -1;
   }
   return ret;
}

現在在您的設置上對其進行測試,如果有任何疑問,請發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM