如何从(例如)文件中将字符串放入2D字符数组?
char buffert[10][30];
int i = 0;
while(!feof(somefile)) {
fscanf(somefile, "%s", temp);
buffert[i][] = temp;
i++;
}
这不会这样做。
答案 0 :(得分:4)
试试这个:
while(i < 10 && fscanf(somefile, "%29s%*[^ \t\n]", buffer[i]) != EOF) {
i++;
}
"%29s"
格式说明符最多可将29个字符读入buffer[i]
,这就是它有空间。如果字符串长度超过29个字符,"%*[^ \t\n]"
会读取并丢弃非空格。
此外,while (!feof()) { }
几乎总是错误的做法,因为直到遇到文件结尾才会在流上设置EOF
。
答案 1 :(得分:0)
从this forum被盗:
#include <stdio.h>
main()
{
int dirsize = 80;
char array[9][dirsize];
int linenum = 0;
FILE *filepointer;
filepointer = fopen("projectfile.txt","r");
while (feof(filepointer) == 0)
{
linenum++;
fgets(array[linenum], dirsize, filepointer);
}
fclose(filepointer);
}
另一个解决方案,指向数组而不是数组数组is here.
答案 2 :(得分:0)
它看起来并不像你实际上正在将字符串复制到数组中。我很惊讶它编译。我错过了什么吗?
查看strcpy或strncpy,或者您可以使用for循环进行复制。
答案 3 :(得分:-2)
取消temp,将每个字符串直接放入为其创建的空间中(在这种情况下是缓冲)。
char buffert[10][30];
int i = 0;
FILE * fp = fopen("myfile", "r");
while(!feof(fp)) {
fscanf(fp, "%s", buffert[i]);
i++;
}
这里的文件指针叫做fp。您必须进行一系列检查以防止溢出buffert中可用的10个条目,或者每个字符串中可用的30个字符。你也应该避免feof()。