我想要做的是能够从文件中读取一行并将其粘贴到字符串数组中。这是我到目前为止所做的,但似乎没有用。
...
char line [128];
char file [10][128];
plist = fopen("plist1.txt", "r");
while(fgets(line, sizeof line, plist) != NULL){
file[i][0]= line;
i++;
}
我尝试了file[i][0] = *line;
,我能够打印出每一行的第一个字符。这是我做我想做的最好的方式吗?
此外,文本文件中的行数会有所不同,所以我希望我的数组可变长度而不是10。
编辑:我已经尝试了下面列出的两个解决方案。两者都给我一个处理strcpy或fgets的分段错误。1. while (fgets(file[i], sizeof(file[i]), plist))
i++;
2. while (fgets(line, sizeof(line), plist)){
strcpy(file[i], line);
i++;
}
答案 0 :(得分:4)
试试这个:
while (fgets(file[i], sizeof(file[i]), plist))
i++;
可选地
while (fgets(line, sizeof(line), plist))
strcpy(file[i], line);
答案 1 :(得分:2)
这是一个完全有效的解决方案,假设plist1.txt
每行包含一行文本。默认情况下,fgets()
在最后还会包含一个换行符,您需要删除它。使用符号常量也是一个好主意,这样如果你愿意,可以在以后轻松更改它们。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF 128 /* can change the buffer size as well */
#define TOT 10 /* change to accomodate other sizes, change ONCE here */
int main(void) {
char line[TOT][BUF];
FILE *plist = NULL;
int i = 0;
int total = 0;
plist = fopen("plist1.txt", "r");
while(fgets(line[i], BUF, plist)) {
/* get rid of ending \n from fgets */
line[i][strlen(line[i]) - 1] = '\0';
i++;
}
total = i;
for(i = 0; i < total; ++i)
printf("%s\n", line[i]);
return 0;
}
答案 2 :(得分:0)