NUL字符吗?chrorchar功能。我在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 …
检查字符串是否仅包含空字符的正确方法是什么?
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'?
我有一个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) 在linux中,文件末尾没有空字符是正常的吗?
我做了一个空文件并用鼠标垫打开az.
保存.
当我用十六进制编辑器打开文件时,没有空字符但是0a就在那里.
我应该把什么空字符放在文件末尾?
当我用系统调用写文件.
是啊0?还是0?
谢谢
我正在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) 假设我们正在对一堆文件进行多行正则表达式模式搜索,并且我们想从 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 …
我看过这篇文章.但当我尝试时:
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'?
我有两个关于char数组的问题.
从下面的代码开始,既然arr是const,为什么编译器没有给我一个错误,因为我正在重写它?
char arr[5]; // arr is a const pointer to (*)[5] array
cin>>arr; //
Run Code Online (Sandbox Code Playgroud)当我初始化一个这样的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个空格呢?
我一直试图从我的字符串中删除所有零字符
我的字符串是由这些十六进制字节组成的
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)