我想从文件中读取单行字符(用于学校练习)。该练习规定该字符串最多包含 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/