我想逐行读取文件,而不知道以前的行长度.这是我到目前为止所得到的:
int ch = getc(file);
int length = 0;
char buffer[4095];
while (ch != '\n' && ch != EOF) {
ch = getc(file);
buffer[length] = ch;
length++;
}
printf("Line length: %d characters.", length);
char newbuffer[length + 1];
for (int i = 0; i < length; i++)
newbuffer[i] = buffer[i];
newbuffer[length] = '\0'; // newbuffer now contains the line.
Run Code Online (Sandbox Code Playgroud)
我现在可以计算出行长度,但仅适用于短于4095个字符的行,加上两个char数组似乎是执行任务的一种尴尬方式.有没有更好的方法来做到这一点(我已经使用了fgets(),但被告知它不是最好的方式)?
--Ry
cod*_*ict 15
您可以从您选择的一些合适尺寸开始,然后realloc如果您需要更多空间,请在中途使用:
int CUR_MAX = 4095;
char *buffer = (char*) malloc(sizeof(char) * CUR_MAX); // allocate buffer.
int length = 0;
while ( (ch != '\n') && (ch != EOF) ) {
if(length ==CUR_MAX) { // time to expand ?
CUR_MAX *= 2; // expand to double the current size of anything similar.
buffer = realloc(buffer, CUR_MAX); // re allocate memory.
}
ch = getc(file); // read from stream.
buffer[length] = ch; // stuff in buffer.
length++;
}
.
.
free(buffer);
Run Code Online (Sandbox Code Playgroud)
调用malloc和后,您必须检查分配错误realloc.
| 归档时间: |
|
| 查看次数: |
34882 次 |
| 最近记录: |