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