c - 如何在 fgetc 中的 C 字符串中存储重复的空字符?

标签 c string null stdin fgetc

编辑: 这根本不能可靠地处理字符串。我已经更改了整个系统以使用 int 数组。还消除了许多其他令人头痛的问题。我的 MVC 的工作版本是:

#include <stdio.h>
#include <string.h>

int main (){
    int nextChar;
    int augmented[256];
    int index = 0;
    while ((nextChar = fgetc(stdin)) != EOF){
        augmented[index] = nextChar;
        index++;
    }
    for (int i = 0; i <= index;++i){
        printf("%c", augmented[i]);
    }
}

编辑结束

原帖:

我正在尝试为作业实现 LZW 压缩器。到目前为止,一切在文本上都运行良好,但如果输入文件包含大量空字符,我就会输出垃圾。

在开始时,我将传入的 char 存储为 int 以检查 EOF,然后将其转换为 char 以连接到我的增强字符串以进行字典比较。我在每个文件后打印了我的字典,发现长时间运行零时我的字典条目是空字符串。

我认为发生的情况是它采用一串零并使其成为单个零。不是想要的值。我需要把所有这些零都去掉。

我编写了一个最小可行的代码来显示错误,并发现它发生在类型转换阶段。如何构建对空字符的检查,以便可以将其替换为可以存储在字符串中的其他内容?

#include <stdio.h>
#include <string.h>

int main (){
    int nextChar;
    char augmented[256] = "\0";
    while ((nextChar = fgetc(stdin) != EOF)){
        char charBuffer[2];
        sprintf(charBuffer, "%c", nextChar);
        strcat(augmented, charBuffer);
    }
    printf("%s",augmented);
}

我已经搜索了几天,我想我似乎无法弄清楚正确的查询应该是什么,因为我没有找到任何有用的结果。

最佳答案

问题出在括号上。更改为:

while ((nextChar = fgetc(stdin)) != EOF){

您的代码将比较值 fgetc(stdin)) != EOF 分配给 nextChar

您还应该将 charBuffer 初始化为零。

关于c - 如何在 fgetc 中的 C 字符串中存储重复的空字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61979650/

相关文章:

c - 带指针的二维数组

c - Malloc/free 双重释放或损坏错误

c++ - 尽管有切片,为什么 static_cast 仍然可以使用空指针?

c - 我的反向函数出了什么问题

c - GCC 2.9 和 "lvalue required as left operand of assignment"

c - 低分辨率曼德尔布罗分形……分辨率不够高?

objective-c - 如何将 NSString 从 CamelCase 转换为 TitleCase, 'playerName' 转换为 'Player Name'?

php - 在php中检查字符串的第一个和最后一个字符最简单的是什么

sql - 左边连接两张表,若为空则默认为0

java - 为什么我的 Spring @Autowired 字段为空?