gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:20:30 25 4
gpt4 key购买 nike

我有一段相对简单的 C 代码 - 接收单词文件 dict.txt(每行一个单词,所有字母和小写字母)。

目标是将每个单词“加载”到名为 word 的数组中,打印该单词,然后重复直到 EOF。

目前,printf("%s\n", ptr) 会按照预期打印一个空行到控制台,而不是一个字符串。 这是为什么?我该如何解决?

#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() 调用移至循环后以避免 NULL 错误。

最佳答案

你的意思是,

word[index] = c;

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

并解决这个问题

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

关于Char 数组不会作为字符串打印到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46143068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com