首页 > 解决方案 > 扫描空值(ASCII)

问题描述

我想问我如何扫描一个值为 0x00 的字母(我知道它为空)。我调用我的函数 echo -e '\x00' | function /.myfunction 我需要将它扫描成一个字符串以便稍后打印它。

标签: c

解决方案


如何扫描值为 0x00 的字母

当然,输入Null Character1 Enter"%s"空字符视为任何其他非空白字符。

char s[2];
scanf("%1s", s);

会很好地制作s[0] == '\0'(由于输入空字符)和s[1] == '\0'附加的空字符

不过,后续代码可能无法s[]作为字符串使用。您可能需要使用"%c"or的新方法getchar()。建议一个带有长度的字符数组,而不是一个字符串


如果需要使用scanf(),则用 跟踪长度"%n"

char buf[100];
int n1,n2
if (scanf(" %n%99s%n2", &n1, buf, &n2) == 1) {
  int length_read = n2 - n1;
  for (int i=0; i<length_read; i++) {
    if (isprint((unsigned char) buf[i])) {
      printf("%c", buf[i]);
    } else {
      // do something special for non-printable characters.
      printf("(%X)", (unsigned char) buf[i]);
    } 
  }
}    

1 Null Character可能很难直接进入,因为 OP 正在使用管道以外的其他管道。一些键盘允许Crtl Shift @.


推荐阅读