gpt4 book ai didi

c - 尝试使用 fgetc() 从文件中读取未知字符串长度

转载 作者:行者123 更新时间:2023-12-04 01:36:23 26 4
gpt4 key购买 nike

是的,看到了很多与此类似的问题,但想尝试以我的方式解决它。运行后获得大量文本 block (编译正常)。

我正在尝试从文件中获取未知大小的字符串。考虑分配大小为 2 的点(1 个字符和空终止符),然后使用 malloc 为超出数组大小的每个字符增加字符数组的大小。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char *pts = NULL;
int temp = 0;

pts = malloc(2 * sizeof(char));
FILE *fp = fopen("txtfile", "r");
while (fgetc(fp) != EOF) {
if (strlen(pts) == temp) {
pts = realloc(pts, sizeof(char));
}
pts[temp] = fgetc(fp);
temp++;
}

printf("the full string is a s follows : %s\n", pts);
free(pts);
fclose(fp);

return 0;
}

最佳答案

你可能想要这样的东西:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define CHUNK_SIZE 1000 // initial buffer size

int main()
{
int ch; // you need int, not char for EOF
int size = CHUNK_SIZE;

char *pts = malloc(CHUNK_SIZE);
FILE* fp = fopen("txtfile", "r");

int i = 0;
while ((ch = fgetc(fp)) != EOF) // read one char until EOF
{
pts[i++] = ch; // add char into buffer

if (i == size + CHUNK_SIZE) // if buffer full ...
{
size += CHUNK_SIZE; // increase buffer size
pts = realloc(pts, size); // reallocate new size
}
}

pts[i] = 0; // add NUL terminator

printf("the full string is a s follows : %s\n", pts);
free(pts);
fclose(fp);

return 0;
}

免责声明:

  1. 这是未经测试的代码,它可能无法工作,但它展示了这个想法
  2. 为简洁起见绝对没有错误检查,您应该添加它。
  3. 还有其他改进的空间,它可能会做得更优雅

关于c - 尝试使用 fgetc() 从文件中读取未知字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59377613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com