对于solaris上的不可打印字符,'isprint'返回true

ale*_*ary 2 c c++ solaris

我们有一个包含字符流的字符缓冲区.我们一次阅读每个角色并进行检查isprint.虽然某些点的读取isprint对于不可打印的字符返回true.我们打印了该字符的十进制值-92- 但是isprint在Solaris上为此返回TRUE.

码:

for (int lix = 0; lix < l_len; ++lix) {
    int lch = l_buf[lix];
    if (isprint(lch) && !isspace(lch)) {
        fputc(lch, l_fp);
    }
    else {
        fprintf(l_fp, "\\%03o", lch);
    }
}
Run Code Online (Sandbox Code Playgroud)
  • l_buf是类型const char*并包含字符流.
  • 此缓冲区中的数据来自套接字读取.
  • 完全相同的代码在AIX上运行良好; 即,isprint对于falseAIX和trueSolaris 上的缓冲区中特定索引上的字符.

250*_*501 8

如果函数的参数isprint()(类型int不能表示为unsigned char等于或等于EOF),则行为未定义.

7.4字符处理

  1. 标头声明了几个用于分类和映射字符的函数.在所有情况下的参数是一个int,其值应是可表示为unsigned char或应等于宏EOF的值.如果参数具有任何其他值,则行为未定义.


MSa*_*ers 5

cppreference," 如果ch的值不能表示为unsigned char且不等于EOF,则行为未定义."

在您的情况下,EOF似乎不是-92.