c - 在C中获取字符缓冲区中的值的数量(从文件读取)

标签 c

我想从文件中读取单行字符(用于学校练习)。该练习规定该字符串最多包含 1000 个字符。

使用以下代码我能够读取 char[] 中的文件内容:

FILE *fp;
const int buffsize = 1000;
char *filepath = argv[1];
char buff[buffsize];

fp = fopen(filepath, "r");
fscanf(fp, "%s", buff);
//buff has the file contents

考虑这些包括:

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

这似乎工作正常,但是当我想迭代数组时,它远远超出了实际的数组长度(因为我假设我将 buffsize 固定为 1000)。我怎样才能以更好的方式处理这个问题,以便我可以迭代正确数量的索引?

最佳答案

要获取字符串的长度(这是一个更好的术语,因为它与所在缓冲区的大小关系不大),请使用 strlen():

const size_t len = strlen(buff);

这将计算第一个 0 字符之前的字符数,这就是 C 中字符串的终止方式(“结束标记”)。

现在,如果需要,您可以使用索引进行迭代:

for(size_t i = 0; i < len; ++i)
  printf("The character at index %zu is '%c'\n", i, buff[i]);

请注意,许多 C 程序员会使用指针直接迭代缓冲区:

for(const char *s = buff; *s != '\0'; ++s)
  printf("Found character '%c'\n", *s);

关于c - 在C中获取字符缓冲区中的值的数量(从文件读取),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41210103/

相关文章:

c++ - gotoxy() 函数在 Visual Studio 中不起作用

c - 如果程序以 exec 运行则没有颜色输出

c++ - 如何从调用图中省略内置函数

从头开始创建 grep 命令

C fscanf 让我重复行

c - 用C从文件中读取数据

c - 是否可以修改 Dymola 的编译器包含路径?

c - 局部函数变量初始化需要处理时间?

c - 内联汇编,进入中断

c# - 调用 C 代码时避免 AccessViolationException