我想从一行文件中读取字符(用于学校练习)。运动状态表示该字符串最多为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我假设)。我怎么能以更好的方式处理这个问题,所以我可以迭代正确数量的索引?
答案 0 :(得分:0)
C - &#34;字符串&#34; 1000个字符的缓冲区需要1000 + 1 = 1001 char
s的缓冲区,因为C - &#34;字符串&#34;的结尾由另外的0
表示。
因此,要使代码实际读取1000个字符,请更改
const int buffsize = 1000;
是
const int buffsize = 1000 + 1;
并确保只扫描1000 char
而不是溢出buff
,请更改
fscanf(fp, "%s", buff);
是
fscanf(fp, "%1000s", buff);
答案 1 :(得分:0)
要获得字符串的长度(这是一个更好的术语,因为它与它所在的缓冲区的大小没什么关系),请使用strlen()
:
const size_t len = strlen(buff);
这将计算第一个0字符前的字符数,这是字符串在C中终止(&#34;结束标记&#34;)的方式。
现在,您可以根据需要使用索引进行迭代:
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);