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

如何从文件中读取字符并将其存储到C中的字符串中?,c,C,我试图从文件中读取一行字符,将每个字符放入一个字符串中,然后以各种方式使用该字符串。我只是发布了打印,因为这是我想尝试的几件事情中的第一件,但那不起作用。我的代码没有打印字符串的任何值。我道歉,如果格式不好,但我写在我的电话,因为我没有在家里上网 #include<stdio.h> int main(int argc, char **argv){ File*fp = fopen(argv[1]); char curr; char string[7];

我试图从文件中读取一行字符,将每个字符放入一个字符串中,然后以各种方式使用该字符串。我只是发布了打印,因为这是我想尝试的几件事情中的第一件,但那不起作用。我的代码没有打印字符串的任何值。我道歉,如果格式不好,但我写在我的电话,因为我没有在家里上网

#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;
}
#包括
int main(int argc,字符**argv){
文件*fp=fopen(argv[1]);
半货币;
字符串[7];
int i=0;
while(curr!=EOF){
字符串[i]=当前值;
printf(“%c\n”,curr);
curr=fgetc(fp);
i++;
}
字符串[7]='\0';
printf(“%s\n”,字符串);
返回0;
}
我通常会通过test.txt进入它,里面只有字母a-f。如何修复此代码

编辑:用字符串[7]将“\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);
}

下面的评论中有一些问题需要指出

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);
File*fp=fopen(argv[1]);//键入为文件,需要打开模式
字符电流;//curr需要int!=EOF
字符串[7];
int i=0;
而(curr!=EOF){//使用未初始化的变量
字符串[i]=curr;//使用未初始化的变量
printf(“%c\n”,curr);
curr=fgetc(fp);
i++;//需要限制,例如i++<6
}
字符串[7]='\0'//外部阵列边界
printf(“%s\n”,字符串);

修正如下:

#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;
}
#包括
#定义尺寸7
int main(int argc,字符**argv){
如果(argc<2){
fprintf(stderr,“用法:%s文件名\n”,*argv);
返回-1;
}
文件*fp=fopen(argv[1],“r”);
如果(!fp){
佩罗尔(“福彭”);
返回-2;
}
国际货币;
字符字符串[大小];
int i=0;
而(i
你想用'string[7];'做什么?为了终止字符串,您需要添加\0并使数组变长。字符字符串[8]。。。字符串[7]='\0';1)
File*fp
-->
File*fp
2)
charcurr-->
int curr3)
while(curr!=EOF){
-->
while((curr=fgetc(fp))!=EOF&&i<6){
并在while循环中删除它。4)
字符串[7]='\0';
-->
字符串[i]='\0';
字母的数量是正确的。Curr打印很好,但string不正确。我使用此代码作为一个更大代码的测试,我需要从流中读取字符并将其放入字符串。
while(Curr!=EOF){string[I]=curr;
:您是第一次使用未初始化的变量。我用它来生成一段更大的代码,这样读取整行代码就行不通了。我绝对需要做的是从流中逐字符读取,然后将eaxh char放入一个char数组中,最后有一个字符串,我可以调用字符串函数。逐字符读取然后把结果放在一个字符串中似乎有点违反直觉。不知道为什么你必须这样做,而你可以直接把输入放在一个字符串中。