gpt4 book ai didi

c - fgets 和不可打印的字符

转载 作者:行者123 更新时间:2023-12-02 02:06:31 24 4
gpt4 key购买 nike

fgets 能否将不可打印的字符读取到给定的 char* 中(看来我不能)?如果不是,有什么替代方法可以将最大数量的输入字符从流中输入到 char* 中?

编辑(针对我的特殊情况)

我有一个编码器将“Le\D7”打印到标准输出,它通过管道传输到解码器,解码器使用以下方法从其标准输入中获取:

if( fgets( inputChars, MAX_BYTES_IN, stdin ) == NULL )
{
fprintf( stderr, "Trouble getting input\n" );
return 0;
}

while( inputChars[crntChar] != '\0' && inputChars[crntChar] != '\n' )
{
printf( "Value %d: %d\n", crntChar, inputChars[crntChar]);
crntChar++;
}

这导致:

Value 0: 76
Value 1: 101
Value 2: -41

使用fgetc有同样的结果

最佳答案

由于无符号到有符号整数的转换,您得到了一个奇怪的值。

char x = 198;

printf("x = %d\n", x);
printf("(unsigned) x = %u\n", (unsigned) x);
printf("(unsigned char) x = %d\n", (unsigned char) x);

输出:

x = -58(unsigned) x = 4294967238(unsigned char) x = 198

(unsigned char) 转换就是您想要的。

请忽略我代码中的签名溢出。请注意,如果您使用 GCC 和 -funsigned-char 标志进行编译,则输出为:

x = 198(unsigned) x = 198(unsigned char) x = 198

关于c - fgets 和不可打印的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14765082/

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