这可能是一种非常低效的方法,但它确实有效
此代码读取一个文件,一次在全局数组中存储 8 行文本(如果可能的话,希望有更好的选择来执行此操作)并分派以进行进一步处理。
这是代码
int count = 0; //global
char *array_buffer[8]; //global
void line(char *line_char)
{
int lent = strlen(line_char);
array_buffer[count] = line_char;
printf("%d\n",count);
if (count == 8)
{
int row,col;
for(row = 0; row<count; row++){
printf("%d\n",row);
for(col = 0; col<=lent; col++) {
printf("%c", array_buffer[row][col]);
}
printf("\n");
}
count = 0;
}
count++;
}
int main(int argc,char **argv)
{
clock_t start = clock();
FILE *fp = fopen(argv[1], "r");
if(fp == NULL )
{
printf("Couldn't open file %s",argv[1]);
}
char buff[512];
while (fgets(buff, 512, fp) != NULL )
{
line(buff); /*sending out an array having one line*/
}
return 0;
}
问题是,在打印 array_buffer 的内容时,它打印了缓冲区中的最后一行 8 次。 (即第 8 行在每个周期中的读数)。很明显
array_buff[0]
....
array_buff[7]
全部指向第8行的地址
有什么帮助解决这个问题吗?我知道这可能根本不是缓冲某些东西的正确方法!
导致您看到的行为的方法的问题是您的代码永远不会从缓冲区复制数据。这条线
array_buffer[count] = line_char;
放置一个指向相同的指针char buff[512]
from main
在所有八个地点。随后调用fgets
覆盖以前读取的内容,因此您最终会得到最后一行的八个副本。
您可以通过制作副本来解决此问题,例如和strdup
或者通过分配内存malloc
并复印一份。你需要free
不过,你分配的一切。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)