将字符串放入C中的2D chararray中

时间:2009-10-21 12:57:06

标签: c arrays string char

如何从(例如)文件中将字符串放入2D字符数组?

char buffert[10][30];
int i = 0;

while(!feof(somefile)) {
  fscanf(somefile, "%s", temp);
  buffert[i][] = temp;
  i++;
}

这不会这样做。

4 个答案:

答案 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()。