gpt4 book ai didi

c - 如何从标准输入读取-1 字符?

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:23 26 4
gpt4 key购买 nike

我真的很想弄清楚如何读取值为 -1/255 的 char,因为对于大多数函数来说,这意味着 EOF。例如,如果我输入扩展 ASCII 中的所有字符,从低到高(十进制值),我最终得到 -1/255,这是 EOF,所以我不会将它放入数组。我创建了小代码来表达我的问题。

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

#define BUFFERSIZE 1024

int main(void){
char c;
unsigned int *array = (unsigned int*)calloc(BUFFERSIZE,sizeof(unsigned int)), i = 0;
while (1){
c = fgetc(stdin);
if (c == EOF)
break;
array[i] = c;
i++;
}
array[i] = 0;
unsigned char *string = (unsigned char *)malloc(i);
for(int j = 0;j < i;j++)
string[j] = array[j];
free(array);

//working with "string"

return 0;
}

我可以模式

if (c == EOF)
break;

像这样

c = fgetc(stdin);
array[i] = c;
i++;
if (c == EOF)
break;

当然,程序也会读取用户从键盘输入的控制字符(例如 Ctrl+D - Linux)。我尝试以二进制形式打开 stdin,但我发现 posix 系统将所有文件作为二进制文件。我正在使用 QT、GCC 和 Ubuntu。我尝试了 fread、read、fgets,但结果还是一样。简单地说,我需要读取我在 stdin 上输入的所有内容并将其放入 char 数组,除非我输入控制字符 (Ctrl+D) 以结束读取。任何建议表示赞赏。

最佳答案

编辑:如@ TonyB 的评论中所述你不应该将 c 声明为 char 因为 fgetc() 返回 int,所以将它更改为 int c; 应该可以在 c 中存储 EOF

我没有看到您将 c 声明为 char c; 所以所有的功劳归于@ TonyB .

原答案:虽然问题在评论中得到了解决,并且我在这个答案中添加了解决方案,但我想你很困惑,EOF 不是一个字符,它是一些 I/O 函数返回的特殊值,用于指示流的结束。

你永远不应该假设它的值是 -1,它经常是,但是有一个宏是有原因的,所以你应该始终依赖这些函数返回 EOF 不是 -1

由于值 -1 没有 ascii 表示,您不能将其作为字符输入,但是您可以解析输入字符串 {'-', '1', '\0'},并在需要时将其转换为数字。

此外,Do not cast the return value of malloc() .

关于c - 如何从标准输入读取-1 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872086/

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