编辑: 这根本不能可靠地处理字符串。我已经更改了整个系统以使用 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/