2.c:16:5: 错误:只允许在 C99 模式下使用‘for’循环初始化声明 for (int i = 1; i < line_number; i++) {
时间: 2024-04-08 20:35:34 浏览: 15
抱歉,我忽略了一些重要的信息。在旧版本的C语言标准中(如C89),不允许在`for`循环中声明变量。为了解决这个问题,你可以将变量声明提到函数开头,或者在编译时使用支持C99标准的编译器。
以下是一个修改后的代码示例,它将变量声明提到函数开头:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_LINE_LENGTH 1024
void read_file_by_line(const char* filename, int line_number) {
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("Failed to open file.\n");
return;
}
int i;
for (i = 1; i < line_number; i++) {
if (fgets(NULL, MAX_LINE_LENGTH, file) == NULL) {
printf("Line number exceeds file length.\n");
fclose(file);
return;
}
}
char line[MAX_LINE_LENGTH];
if (fgets(line, MAX_LINE_LENGTH, file) != NULL) {
printf("Line %d: %s", line_number, line);
} else {
printf("Line number exceeds file length.\n");
}
fclose(file);
}
void write_file_by_line(const char* filename, int line_number, const char* content) {
FILE* file = fopen(filename, "r+");
if (file == NULL) {
printf("Failed to open file.\n");
return;
}
int i;
for (i = 1; i < line_number; i++) {
if (fgets(NULL, MAX_LINE_LENGTH, file) == NULL) {
printf("Line number exceeds file length.\n");
fclose(file);
return;
}
}
long position = ftell(file);
fseek(file, position, SEEK_SET);
fputs(content, file);
fclose(file);
}
int main() {
const char* filename = "example.txt";
int line_number = 3;
read_file_by_line(filename, line_number);
write_file_by_line(filename, line_number, "This is a new line.");
return 0;
}
```
请注意,这只是一种解决方法。如果你的编译器支持C99标准,你也可以在编译时添加参数`-std=c99`,以支持在`for`循环中的变量声明。
如果你还有其他问题,请随时提问。