簡體   English   中英

如果我使用 fscanf 讀取文件,我可以使用它來存儲它讀取的字符數嗎?

[英]If I use fscanf to read a file, can I use it to store the number of characters it reads?

我正在嘗試使用fscanf從文件中讀取一堆單詞(全部在單獨的行上),並且我想找到每個單詞的長度。 fscanf是否允許我這樣做,或者如果沒有,還有其他方法嗎? 我一直在尋找關於“輸入項成功匹配和分配”的解釋,但這仍然有點令人困惑。

要查找掃描單詞(或intdouble 、...)的文本長度,請在說明符前后添加一對"%n" "%n"保存掃描偏移並且不影響scanf()返回值。

int n1;
int n2;
char buff[100];
//            v-------- space to consume leading white-space
while (scanf(" %n%99s%n", &n1, buff, &n2) == 1) {
  printf("word <%s> length: %d\n", buff, n2 - n1); 
}

如果項目是帶有"%f"double精度,帶有"%d"int ,則上述工作同樣有效,...。


對於"%s" ,可以在掃描后使用strlen()找到字符串的長度。

char buff[100];
while (scanf("%99s", buff) == 1) {
  printf("word <%s> length: %zu\n", buff, strlen(buff)); 
}

先進的

學究式地,輸入可能包括嵌入的 null 字符 Null 字符通常不會在文本文件中找到,除非是偶然(將 UTF-16 讀取為 UTF-8)或惡意用戶。 使用"%s" ,讀取null 字符將被視為任何其他非空白字符。 因此, " %n%99s%n"方法可能導致長度超過strlen()


我一直在尋找關於“輸入項成功匹配和分配”的解釋,但這仍然有點令人困惑。

scanf()的返回值大致是匹配說明符的計數,而不是單詞的長度。 如果掃描不完整,則返回值可能小於說明符的數量;如果第一次遇到文件結尾,則返回值可能小於EOF "%n"不計入此計數。 帶有"*"的說明符也沒有貢獻。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM