【发布时间】:2016-02-16 20:46:45
【问题描述】:
我正在尝试读取一个文件和下一行,以查看它是否以空格开头,例如:
First line
second line
Third line
fourth line
当我读入文件时,我想检查下一行是否有空格,如果有,我想对这两行(在本例中为第一行和第二行)进行 strcat。
所以对于第一个例子:
1.) 读入第一行,提前读到第二行,看看它们是一个空格,然后 strcat 两个字符串,生成"First linesecond line"(对遵循此模式的任何其他行重复)。
这是我的尝试:
int main(void) {
FILE * file = fopen("file.txt","r");
if(file==NULL) { return 0; }
char * fileBuffer = malloc(sizeof(char)*100);
char * temp = malloc(sizeof(char)*100);
while(fgets(fileBuffer,100,file) != NULL) {
if(isspace(fileBuffer[0])) {
strcpy(temp,fileBuffer);
//store line that has a space in static temporary variable
}
else {
if(strcmp(temp,"") != 0) { //if temp is not empty
strcat(fileBuffer,temp);
}
}
}
free(fileBuffer);
free(temp);
return 0;
}
但是这不起作用。发生的情况是当 fgets 被执行时,它读取第一行,发现没有空白,然后转到下一行,看到有空白,存储它,但现在 fileBuffer 不再包含第一行,但第二个。
所以当我下次strcat时,我没有得到“第一行第二行”的正确结果。
相反,我得到了第三行与第二行混合的结果,这不是我想要的。
我不确定如何在这里修正我的逻辑,有什么想法吗?
【问题讨论】:
-
使用
memset()将fileBuffer设置为0作为while循环的最后一条语句。 -
temp可能不足以容纳整个fileBuffer -
我已经修复了 temp 的分配。 Sourav 我也不太清楚你所说的“在 while 循环的最后”是什么意思。
-
static char * temp = malloc(sizeof(char)*100);不是合法的标准 C。那么你使用的是什么编译器? -
发布代码
if(isspace(fileBuffer[0]) {不可编译 - 发布真实代码。