c++ 逐行读取txt文件内容写入*char[]

static char *labels[OBJ_CLASS_NUM];

double __get_us(struct timeval t) { return (t.tv_sec * 1000000 + t.tv_usec); }

inline static int clamp(float val, int min, int max)
{
    return val > min ? (val < max ? val : max) : min;
}

char *readLine(FILE *fp, char *buffer, int *len)
{
    int ch;
    int i = 0;
    size_t buff_len = 0;

    buffer = (char *)malloc(buff_len + 1);
    if (!buffer)
        return NULL; // Out of memory

    while ((ch = fgetc(fp)) != '\n' && ch != EOF)
    {
        buff_len++;
        void *tmp = realloc(buffer, buff_len + 1);
        if (tmp == NULL)
        {
            free(buffer);
            return NULL; // Out of memory
        }
        buffer = (char *)tmp;

        buffer[i] = (char)ch;
        i++;
    }
    buffer[i] = '\0';

    *len = buff_len;

    // Detect end
    if (ch == EOF && (i == 0 || ferror(fp)))
    {
        free(buffer);
        return NULL;
    }
    return buffer;
}

int readLines(const char *fileName, char *lines[], int max_line)
{
    FILE *file = fopen(fileName, "r");
    char *s;
    int i = 0;
    int n = 0;
    while ((s = readLine(file, s, &n)) != NULL)
    {
        lines[i++] = s;
        if (i >= max_line)
            break;
    }
    return i;
}


int readFloats(const char *fileName, float* result, int max_line, int* valid_number)
{
    FILE *file = fopen(fileName, "r");
    if (file == NULL) {
        printf("failed to open file\n");
        return 1;
    }

    int n = 0;
    while ((n<=max_line) &&(fscanf(file, "%f", &result[n++]) != EOF))
        ;

    /* n-1 float values were successfully read */
    // for (int i=0; i<n-1; i++)
    //     printf("fval[%d]=%f\n", i, result[i]);

    fclose(file);
    *valid_number = n-1;
    return 0;
}

int loadLabelName(const char *locationFilename, char *label[])
{
    printf("loadLabelName %s\n", locationFilename);
    readLines(locationFilename, label, OBJ_CLASS_NUM);
    return 0;
}
 int ret = 0;
 ret = loadLabelName(LABEL_NALE_TXT_PATH, labels); // 加载标签
 if (ret < 0)
 {
     printf("Failed in loading label\n");
     return -1;
 }

 // 从txt获取anchor
 printf("%sAnchors: ", INDENT);
 float result[n];
 int valid_number;
 readFloats(anchor_path, &result[0], n, &valid_number);
 for (int i=0; i<valid_number; i++){
     y_info.anchors[i] = (int)result[i];
     printf("%d ", y_info.anchors[i]);
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C 语言中,可以使用 `fopen()` 函数打开文件,使用 `fread()` 函数读取文件,使用 `fwrite()` 函数写入文件,使用 `fclose()` 函数关闭文件。 下面是一个简单的示例,演示如何读取写入一个文本文件: ```c #include <stdio.h> int main() { FILE *fp; char buffer[255]; // 打开文件,以只读方式打开 fp = fopen("example.txt", "r"); // 如果文件打开失败,返回 NULL if (fp == NULL) { printf("无法打开文件\n"); return 1; } // 读取文件内容 while (fgets(buffer, 255, fp)) { printf("%s", buffer); } // 关闭文件 fclose(fp); // 打开文件,以写入方式打开 fp = fopen("example.txt", "w"); // 如果文件打开失败,返回 NULL if (fp == NULL) { printf("无法打开文件\n"); return 1; } // 写入文件内容 fprintf(fp, "Hello, World!\n"); // 关闭文件 fclose(fp); return 0; } ``` 在上面的示例中,我们首先使用 `fopen()` 函数以只读方式打开 `example.txt` 文件。如果文件打开失败,该函数将返回 `NULL`。接下来,我们使用 `fgets()` 函数读取文件内容。`fgets()` 函数每次读取一行,最多读取 `255` 个字符。我们使用一个循环,直到读取完整个文件。最后,我们使用 `fclose()` 函数关闭文件。 接下来,我们使用 `fopen()` 函数以写入方式打开 `example.txt` 文件。如果文件打开失败,该函数将返回 `NULL`。然后,我们使用 `fprintf()` 函数将 "Hello, World!" 写入文件。最后,我们再次使用 `fclose()` 函数关闭文件。 注意,在使用 `fopen()` 函数打开文件时,需要指定文件的访问模式。常用的访问模式包括: - `"r"`:打开文件,以只读方式打开。如果文件不存在,返回 `NULL`。 - `"w"`:打开文件,以写入方式打开。如果文件不存在,创建一个新文件。如果文件已经存在,将覆盖原文件。 - `"a"`:打开文件,以追加方式打开。如果文件不存在,创建一个新文件。如果文件已经存在,在文件尾部添加新内容。 - `"r+"`:打开文件,以读写方式打开。如果文件不存在,返回 `NULL`。 - `"w+"`:打开文件,以读写方式打开。如果文件不存在,创建一个新文件。如果文件已经存在,将覆盖原文件。 - `"a+"`:打开文件,以读写方式打开。如果文件不存在,创建一个新文件。如果文件已经存在,在文件尾部添加新内容。 以上是常用的访问模式,还有其他访问模式,可以查看 C 语言标准库的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值