标签: null-character

带有 NUL 的 SQLite 字符串

  1. SQLite 3 中的字符串可以包含NUL字符吗?
  2. 如果对 1 的回答是“是”,它们如何写在 SQL 查询中?SQLite 似乎没有chrorchar功能。

sqlite null-character

5
推荐指数
1
解决办法
620
查看次数

fscanf()在不同编译器中的行为不一致(消耗尾随空字符)

我在C99中编写了一个完整的应用程序,并在两个基于GNU/Linux的系统上进行了彻底的测试.当尝试使用Windows上的Visual Studio编译它导致应用程序行为不端时,我感到很惊讶.起初我无法断言出了什么问题,但我尝试使用VC调试器,然后我发现了与fscanf()声明的函数有关的差异stdio.h.

以下代码足以证明问题:

#include <stdio.h>

int main() {
    unsigned num1, num2, num3;

    FILE *file = fopen("file.bin", "rb");
    fscanf(file, "%u", &num1);
    fgetc(file); // consume and discard \0
    fscanf(file, "%u", &num2);
    fgetc(file); // ditto
    fscanf(file, "%u", &num3);
    fgetc(file); // ditto
    fclose(file);

    printf("%d, %d, %d\n", num1, num2, num3);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

假设file.bin包含512\0256\0128\0:

$ hexdump -C file.bin
00000000  35 31 32 00 32 35 36 00  31 32 38 00              |512.256.128.|
Run Code Online (Sandbox Code Playgroud)

现在,当在Ubuntu机器上的GCC 4.8.4下编译时,生成的程序按预期读取数字并打印512, 256, 128 …

c scanf stdio null-character

5
推荐指数
1
解决办法
166
查看次数

如何最好地确定一个字符串是否只包含空字符?

检查字符串是否仅包含空字符的正确方法是什么?

String s = "\u0000";
if(s.charAt(0) == 0) {
   System.out.println("null characters only");
}
Run Code Online (Sandbox Code Playgroud)

或者

String s = "\0\0";
for(int i = 0; i < s.length(); i++) {
   if(s.charAt(i) == 0) 
       continue;

   else break;

}
Run Code Online (Sandbox Code Playgroud)

两者都有效。但是有没有更好,更简洁的方法来执行此检查。是否有实用程序可以检查 java 中的字符串是否仅包含空字符(\u0000OR \0)?

和之间有什么区别'\0''\u0000'

java string char null-character java-8

5
推荐指数
3
解决办法
243
查看次数

如何从具有null(0)字符的char数组创建C++ istringstream?

我有一个char数组,在随机位置包含空字符.我尝试使用此数组(encodedData_arr)创建一个iStringStream,如下所示,

我使用这个iStringStream将二进制数据(Iplimage的imagedata)插入MySQL数据库blob字段(使用MySQL Connector/C++的setBlob(istream*is)),它只存储第一个空字符的字符.

有没有办法使用带有空字符的char数组创建iStringStream?

unsigned char *encodedData_arr = new unsigned char[data_vector_uchar->size()];
// Assign the data of vector<unsigned char> to the encodedData_arr
for (int i = 0; i < vec_size; ++i)
{
 cout<< data_vector_uchar->at(i)<< " : "<< encodedData_arr[i]<<endl;
}

// Here the content of the encodedData_arr is same as the data_vector_uchar
// So char array is initializing fine.
istream *is = new istringstream((char*)encodedData_arr, istringstream::in || istringstream::binary);

prepStmt_insertImage->setBlob(1, is);
// Here only part of the data is stored in the database blob …
Run Code Online (Sandbox Code Playgroud)

c++ arrays istream null-character

4
推荐指数
1
解决办法
7892
查看次数

在linux中,文件末尾没有空字符是正常的

在linux中,文件末尾没有空字符是正常的吗?

我做了一个空文件并用鼠标垫打开az.

保存.

当我用十六进制编辑器打开文件时,没有空字符但是0a就在那里.

我应该把什么空字符放在文件末尾?

当我用系统调用写文件.

是啊0?还是0?

谢谢

linux assembly system-calls null-character

4
推荐指数
2
解决办法
1643
查看次数

fgetc null终止符

我正在K&R做一个练习:

编写一个程序detab,用空格中适当数量的空格替换输入中的选项卡到下一个制表位.

这是我到目前为止(没有错误检查文件):

#include <stdio.h>
#define tab 2
#define MAX_LENGTH 1000
int main(int argc, char **argv)
{
    FILE *fp = fopen(argv[1], "r+");    
    int c, n;
    char buffer[MAX_LENGTH + 1];
    for (n = 0; n < MAX_LENGTH && (c = fgetc(fp)) != EOF; ++n) {
        if (c == '\t') {
            for (int x = 0; x < tab; ++x)
                buffer[n++] = ' ';
            --n;
        }
        else
            buffer[n] = c;
    }
    //buffer[n] = '\0';
    //rewind(fp);
    //fputs(buffer, fp);
    printf("%s\n", buffer);
    fclose(fp);
    return 0; …
Run Code Online (Sandbox Code Playgroud)

c null-character fgetc

4
推荐指数
1
解决办法
886
查看次数

如何通过空字符使grep单独输出?

假设我们正在对一堆文件进行多行正则表达式模式搜索,并且我们想从 grep 中提取匹配项。默认情况下,grep 输出由换行符分隔的匹配项,但由于我们使用的是多行模式,这会造成我们无法轻松提取单个匹配项的不便。

例子

grep -rzPIho '}\n\n\w\w\b' | od -a
Run Code Online (Sandbox Code Playgroud)

根据文件树中的文件,这可能会产生类似的输出

0000000   }  nl  nl   m   y  nl   }  nl  nl   i   f  nl   }  nl  nl   m
0000020   y  nl   }  nl  nl   m   y  nl   }  nl  nl   i   f  nl   }  nl
0000040  nl   m   y  nl
0000044
Run Code Online (Sandbox Code Playgroud)

如您所见,我们无法拆分换行符以获得进一步处理的匹配项,因为匹配项本身包含换行符。

什么不起作用

现在--null(or -Z) 仅与 结合使用-l,这使得 grep 仅列出文件名而不是匹配项,因此这在这里无济于事。

请注意,这不是find 的 -print0 和 xargs 的 -0 开关是否有等价的 grep的副本,因为该问题的要求不同,因此可以使用替代技术来回答。

那么,我们怎样才能做到这一点呢?也许将 grep …

unix bash grep text-processing null-character

4
推荐指数
1
解决办法
1557
查看次数

ASCII值= 0和'\ 0'

我看过这篇文章.但当我尝试时:

  printf("before null %c after null\n", 0);  // (ASCII=0) != '\0' ??
Run Code Online (Sandbox Code Playgroud)

而不是得到:

before null 
Run Code Online (Sandbox Code Playgroud)

我有:

before null   after null
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:ASCII值0实际上是否等于'\ 0'?

c ascii null-character

4
推荐指数
1
解决办法
1316
查看次数

C++ - char数组和空字符

我有两个关于char数组的问题.

  1. 从下面的代码开始,既然arrconst,为什么编译器没有给我一个错误,因为我正在重写它?

    char arr[5]; // arr is a const pointer to (*)[5] array
    cin>>arr; //   
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当我初始化一个这样的char数组时:

    char arr[5]={'h','i'};
    
    Run Code Online (Sandbox Code Playgroud)

    如果我这样做:

    cout << arr << "something here \n"; 
    
    Run Code Online (Sandbox Code Playgroud)

    它会打印出来hisomething here.我以为它应该打印出来

    hi   something here
    
    Run Code Online (Sandbox Code Playgroud)

    有3个witespaces.

    但如果我这样做:

    for(int i = 0; i < 5; i++){
      cout << arr[i];
    }
    
    Run Code Online (Sandbox Code Playgroud)

    打印出3个空格.

第二种情况似乎证明编译器不添加任何空字符.那么编译器如何忽略3个空格呢?

c++ arrays chat null-character

3
推荐指数
1
解决办法
4383
查看次数

如何从字符串中删除空字符(零字符)

我一直试图从我的字符串中删除所有零字符

我的字符串是由这些十六进制字节组成的

00 44 00 65 00 6C 00 70 00 68 00 69

对于每个字母,前面都有一个零字节(空字节).我猜测我必须使用某种Unicode编码或宽编码才能获得没有那些零的文本.

但我无法理解,所以我认为最好的方法是使用替换,但即使失败.

Dim packet() As String = {&H0, &H44, &H0, &H65, &H0, &H6C, &H0, &H70, &H0, &H68, &H0, &H69}
Dim str As String = Encoding.ASCII.GetString(packet, 0, 12)
str = str.Replace("\0", "")  'Compiles and fails
str = str.Replace(\0, "")  'No compile
str = str.Replace('\0', "")  'No compile
Run Code Online (Sandbox Code Playgroud)

vb.net unicode ascii character-encoding null-character

3
推荐指数
2
解决办法
2万
查看次数