所以我在我的标记文件中有一系列评论:
# comment1
# comment2
我想将这些读入一个数组,添加到我的struct中的注释数组中。 我不知道提前评论行的数量
我在结构中声明了注释数组,如下所示:
char *comments; //comment array
然后我开始阅读评论,但我得到的是没有工作:
int c;
//check for comments
c = getc(fd);
while(c == '#') {
while(getc(fd) != '\n') ;
c = getc(fd);
}
ungetc(c, fd);
//end comments?
我甚至关闭了吗?
由于
答案 0 :(得分:1)
第一
char *comments; //comment array
一条评论不是一系列评论。
您需要使用realloc来创建字符串数组
char**comments = NULL;
int count = 10; // initial size
comments = realloc(comments, count);
当你得到>计数
count*=2;
comments = realloc(comments, count);// classic doubling strategy
将一个字符串放入数组中(假设注释是一个带有一条注释的char *
comments[i] = strdup(comment);
答案 1 :(得分:0)
您可以使用fgets()
表格<stdio>
来阅读一行。
int num_comments = 0;
char comment_tmp[82];
char comment_arr[150][82];
while(comment_tmp[0] != '#' && !feof(file_pointer)){
fgets(comment_tmp, 82, file_pointer);
strcpy(comment_arr[num_comments], comment_tmp);
num_comments++;
}
这有限,只能存储150条评论。这可以通过1)设置更高的数字,2)使用动态内存分配(想想malloc / free),或者3)将注释组织成更灵活的数据结构(如链表)来克服。
答案 2 :(得分:0)
当你看到该行是注释存储时,注释变量中注释的值只是转到下一行并再次执行此循环。所以代码:
char c = getc(fd);
while(c == '#') {
while(getc(fd) != '\n') /* remove ; */ {
*comment = getc(fd);
++comment;
}
}
或使用更简单的fscanf
:
fscanf(fd,"#%s\n",comment); /* fd is the file */
请注意,此处的评论是字符串,而不是字符串数组。
对于字符串数组,它将是:
#define COMMENT_LEN 256
char comment [COMMENT_LEN ][100];
int i = 0;
while(!feof(fd) || i < 100) {
fscanf(fd,"#%s\n",comment[i]);
getch(); /* To just skip the new line char */
++i;
}