如何从文件中读取字符并将其存储到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 curr代码>3)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数组中,最后有一个字符串,我可以调用字符串函数。逐字符读取然后把结果放在一个字符串中似乎有点违反直觉。不知道为什么你必须这样做,而你可以直接把输入放在一个字符串中。