c - 扫描空值(ASCII)
问题描述
我想问我如何扫描一个值为 0x00 的字母(我知道它为空)。我调用我的函数 echo -e '\x00' | function /.myfunction 我需要将它扫描成一个字符串以便稍后打印它。
解决方案
如何扫描值为 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 @.
推荐阅读
- python - 为 scipy.differential_evolution 设置初始参数
- java - 检查日期是否是从今天开始的一周前 Java
- c# - 如何在c#中的列列表中查找对象
- azure - 以编程方式列出 Azure Continous WebJob 的函数
- php - Codeigniter 表单验证库“必填字段”即使有值
- netlogo - 如何在大圆圈之外绘制形状 - netlogo
- javascript - 使用 javascript 在模态中动态填充 html 模板内容
- android-asynctask - 将 openGL 参数传递给 AsyncTask
- date - 工作日计算的持续时间和R中的时间重叠
- git - 为什么我的最新提交背后是主人