C: 使用 unistd write 打印句点(.)

标签 c hexdump unistd.h

除此之外,我的程序应该将任何小于 32 且大于 126 的字符存储为句点 (.)。然后应该打印出这个时期。

例如,如果将换行符传递给我的打印函数,它应该将其存储为句点,并在其位置打印出句点。

(我不允许使用printf,只能使用系统调用“write”)

这是我的代码部分,它采用名为 asci 的长度为 8 的字符数组,并将其字符编码为需要打印的内容:

unsigned char asci3[8];

    for (int k = 0; k < 8; k++) {

        if ((asci[k] >= 32) || (asci[k] <= 126)) {
            asci3[k] = asci[k];                         
        }           

        else if ((asci[k] < 32) || (asci[k] > 126)) {
            asci3[k] = '.';                         
        }       

    }

这就是我打印 asci3 的方式:

if (write(1, asci3, 8) > 8) {
    return -1;                  
}   

没有打印任何句点。例如,对于换行符,将打印文字换行符,而不是句点。

最佳答案

一个愚蠢的错误!

出现逻辑错误,而不是:

if ((asci[k] >= 32) || (asci[k] <= 126)) {
        asci3[k] = asci[k];                         
}           

else if ((asci[k] < 32) || (asci[k] > 126)) {
        asci3[k] = '.';                         
}       

应该是:

if ((asci[k] >= 32) && (asci[k] <= 126)) {
        asci3[k] = asci[k];                         
}           

else if ((asci[k] < 32) || (asci[k] > 126)) {
        asci3[k] = '.';                         
} 

第一个 || 需要替换为 &&

关于C: 使用 unistd write 打印句点(.),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54937875/

相关文章:

c - cat -b 和 cat -n 之间有什么区别以及 cat -s 如何工作

linux - execve函数的实现(unistd.h)

c - C语言中的简单错误

C - 打印函数返回的字符

c - 将无符号字符数组返回给主函数

c++ - 以十六进制读取文件会给出错误的输出(跳过一些十六进制值)

c++ - 是否有适用于 Windows (Visual C) 的 unistd.h 的替代品?

C正在将字符串转换为十六进制

linux - hexdump 可以用 ASCII 显示 8 列吗?