Char数组不会作为字符串打印到控制台

时间:2017-09-10 16:41:40

标签: c arrays string

我有一个相对简单的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错误。

1 个答案:

答案 0 :(得分:1)

你的意思,

word[index] = c;

您不需要执行任何计算,特别是因为isalpha()确保c是ascii字符。

并修复此

  • 如果fopen()失败,则返回NULL指针,因此ferror()将使用NULL指针作为参数进行调用,并且未定义的行为,而是检查dict != NULL