我有一个相对简单的C代码 - 接受一个文件 dict.txt 的单词(每行一个单词,所有字母和小写)。
目标是将每个单词“加载”到一个名为word的数组中,打印该单词,然后重复直到EOF。
目前,#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "dictionary.h"
int main(void) {
// open given dictionary
FILE* dict;
dict = fopen("dict.txt", "r");
char word[46];
int index = 0; // to navigate word array
char *ptr = word;
// start loading words
for (int c = fgetc(dict); c != EOF; c = fgetc(dict))
{
// allow only alphabetical characters and apostrophes
if (isalpha(c) || (c == '\'' && index > 0))
{
// append character to word
word[index] = c-97;
index++;
} // we must have found a whole word
else if (index > 0)
{
// terminate current word
word[index] = '\0';
printf("%s\n", ptr);
// prepare for next word
index = 0;
}
}
// check whether there was an error
if (ferror(dict))
{
fclose(dict);
printf("Error reading.\n");
return 1;
}
// close text
fclose(dict);
return 0;
}
按照预期将一个空行输出到控制台,而不是字符串。 为什么会这样,我该如何解决?
ferror()
编辑:将define("AJAX_URL", admin_url('admin-ajax.php'));
add_action("wp_enqueue_scripts", "enqueue_eyewebz_scripts");
function enqueue_eyewebz_scripts()
{
wp_enqueue_script("jquery");
...
wp_enqueue_script("root-js", JS_URL . "/root.js", array("jquery"));
$script_params = array(
'ajax_url' => AJAX_URL
);
wp_localize_script('root-js', 'theme_vars', $script_params);
}
调用移至after循环以避免NULL错误。
答案 0 :(得分:1)
你的意思,
word[index] = c;
您不需要执行任何计算,特别是因为isalpha()
确保c
是ascii字符。
并修复此
fopen()
失败,则返回NULL
指针,因此ferror()
将使用NULL
指针作为参数进行调用,并且未定义的行为,而是检查dict != NULL
。