EDIT:这根本无法可靠地处理字符串。 我已经更改了整个系统以使用 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 压缩机。 到目前为止,文本上的一切都很好,但如果输入文件包含长时间的空字符,我会扔垃圾。
一开始,我将传入的字符存储为 int 以检查 EOF,然后将其转换为 char 以连接到我的增强字符串以进行字典比较。 我在每个文件后打印出我的字典,发现对于长时间的零,我的字典条目是一个空字符串。
我认为正在发生的事情是它需要一串零并使其成为一个零。 不是所需的值。 我需要把所有这些零都放出来。
我制作了一个最小的可行代码来显示错误,并发现它发生在铸造阶段。 如何为空字符构建检查,以便我可以将其替换为可以存储在字符串中的其他内容?
#include <stdio.h>
#include <string.h>
int main (){
int nextChar;
char augmented[256] = " ";
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
初始化为零。
以下是程序的一些更新。 0 转换为"0"。不确定您在寻找什么,但希望这能让您指明正确的方向:
#include <stdio.h>
#include <string.h>
int main (){
int nextChar;
char augmented[256] = {0}; // zero entire array
int i = 0;
while ((nextChar = fgetc(stdin)) != EOF){
// convert 0 to some other character
if( nextChar == 0 ) nextChar = '0';
augmented[i++] = (char)nextChar;
//check for buffer overflow
if( i==255) break;
}
printf("%s",augmented);
}