如何从文件中读取字符并将它们存储到C中的字符串中?

时间:2016-11-19 10:21:09

标签: c

我试图从文件中读取一行字符,将每个字符串放入一个字符串中,然后以各种方式使用该字符串。我只发布了印刷原因,这是我想尝试的一些东西中的第一个,但那不起作用。我的代码不会打印字符串的任何值。如果格式不好,我很抱歉,但我在手机上写字,因为我家里没有互联网。

#include<stdio.h>

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

    File*fp = fopen(argv[1]);
    char curr;
    char string[7];
    int i = 0;

     while(curr != EOF){

             string[i] = curr;
             printf("%c\n", curr);
             curr = fgetc(fp);
              i++;
      }

      string[7] = '\0';
      printf("%s\n",string);
      return 0;
}

我通常会将test.txt传递给它,其中只有字母a-f。我该如何修复此代码?

编辑:在字符串[7]的末尾放置'\ 0'。是一个错字

2 个答案:

答案 0 :(得分:0)

  

我试图从文件中读取一行字符,将每个字符串放入一个字符串中,然后以各种方式使用该字符串。

有多种方法可以做到这一点,例如fgets是从fp获取直线的便捷方式。

#define MAXLINE 1000
char string[MAXLINE];
if(fgets(string, sizeof(string), fp) != NULL)
{
    buffer[strcspn(string, "\n")] = 0; // remove \n from fgets
    printf("%s", string);
}

答案 1 :(得分:0)

以下评论中指出了一些问题。

File*fp = fopen(argv[1]); // typo as FILE, and Need open mode
char curr;// Need int for curr != EOF
char string[7];
int i = 0;

 while(curr != EOF){// using uninitialized variables

         string[i] = curr;// using uninitialized variables
         printf("%c\n", curr);
         curr = fgetc(fp);
          i++;//Restriction required E.g i++ < 6
  }

  string[7] = '\0';//Outside array boundary
  printf("%s\n",string);

像这样解决:

#include<stdio.h>

#define SIZE 7

int main(int argc, char **argv){
    if(argc < 2){
        fprintf(stderr, "Usage:%s filename\n", *argv);
        return -1;
    }
    FILE *fp = fopen(argv[1], "r");
    if(!fp){
        perror("fopen");
        return -2;
    }
    int curr;
    char string[SIZE];
    int i = 0;

    while(i < SIZE -1 && (curr = fgetc(fp))!= EOF){//-1 for NUL
         string[i++] = curr;
    }
    fclose(fp);
    string[i] = '\0';
    printf("%s\n",string);
    return 0;
}