标签: null-character

通过Bash循环读取空分隔的字符串

我想迭代一个文件列表,而不关心文件名可能包含哪些字符,所以我使用一个由空字符分隔的列表.代码将更好地解释事情.

# Set IFS to the null character to hopefully change the for..in
# delimiter from the space character (sadly does not appear to work).
IFS=$'\0'

# Get null delimited list of files
filelist="`find /some/path -type f -print0`"

# Iterate through list of files
for file in $filelist ; do
    # Arbitrary operations on $file here
done
Run Code Online (Sandbox Code Playgroud)

从文件读取时,以下代码有效,但我需要从包含文本的变量中读取.

while read -d $'\0' line ; do
    # Code here
done < /path/to/inputfile
Run Code Online (Sandbox Code Playgroud)

bash delimiter null-character

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

(char)0和'\ 0'之间有什么区别?在C.

使用(char)0'\0'表示字符数组中的终止空字符有什么区别?

c null-character

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

将包含空字符(\ 0)的字符串分配给Bash中的变量

在尝试通过使用NULL字符作为分隔符来正确处理文件//foldernames列表(请参阅我的其他问题)时,我偶然发现了Bash的一个奇怪的行为,我不明白:

将包含一个或多个NULL字符的字符串分配给变量时,将丢失/忽略/不存储NULL字符.

例如,

echo -ne "n\0m\0k" | od -c   # -> 0000000   n  \0   m  \0   k
Run Code Online (Sandbox Code Playgroud)

但:

VAR1=`echo -ne "n\0m\0k"`
echo -ne "$VAR1" | od -c   # -> 0000000   n   m   k
Run Code Online (Sandbox Code Playgroud)

这意味着我需要将该字符串写入文件(例如,在/ tmp中),如果不希望或不可行直接管道,则从那里读回.

Z shell(zsh)中执行这些脚本时,在两种情况下都会保留包含\ 0的字符串,但遗憾的是我不能假设在运行我的脚本的系统中存在zsh而Bash应该是.

如何在不丢失任何(元)字符的情况下有效地存储或处理包含\ 0字符的字符串?

bash null-character

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

什么可能导致XML文件填充空字符?

这是一个棘手的问题.我怀疑它需要一些文件系统的高级知识才能回答.

我有一个针对.NET framework 4.0的WPF应用程序"App1".它有一个Settings.settings文件,用于生成App1.exe.config存储默认设置的标准文件.当用户修改设置时,修改将进入AppData\Roaming\MyCompany\App1\X.X.0.0\user.config.这是所有标准的.NET行为.但是,有时,我们发现user.config客户机器上的文件不是应该的,导致应用程序崩溃.

问题看起来像这样:user.config如果用XML填充它应该是大小,但是它只是一堆NUL字符而不是XML.它的角色0一遍又一遍地重复着.我们没有关于导致此文件修改的内容的信息.

在此输入图像描述

如果我们只是删除,我们可以在客户的设备上修复该问题,user.config因为公共语言运行时只会生成一个新问题.他们将失去他们对设置所做的更改,但可以再次进行更改.

但是,我在另一个带有另一个XML文件的WPF应用程序"App2"中遇到了这个问题info.xml.这次是不同的,因为文件是由我自己的代码而不是CLR生成的.常见的主题是两个都是C#WPF应用程序,都是XML文件,在这两种情况下,我们完全无法在测试中重现问题.这可能与C#应用程序与XML文件或文件交互的方式有关吗?

我们不仅无法在当前的应用程序中重现该问题,而且我甚至无法通过编写有意产生错误的自定义代码来重现该问题.我找不到单个XML序列化错误或文件访问错误导致文件填充空值.那么可能会发生什么?

App1 user.config通过调用Upgrade()以及Save()获取和设置属性来访问.例如:

if (Settings.Default.UpgradeRequired)
{
    Settings.Default.Upgrade();
    Settings.Default.UpgradeRequired = false;
    Settings.Default.Save();
}
Run Code Online (Sandbox Code Playgroud)

info.xml通过序列化和反序列化XML来访问App2 :

public Info Deserialize(string xmlFile)
{
    if (File.Exists(xmlFile) == false)
    {
        return null;
    }

    XmlSerializer xmlReadSerializer = new XmlSerializer(typeof(Info));

    Info overview = null;

    using (StreamReader file = new StreamReader(xmlFile))
    {
        overview = (Info)xmlReadSerializer.Deserialize(file);
        file.Close();
    }

    return overview;
}

public void …
Run Code Online (Sandbox Code Playgroud)

c# xml filesystems ntfs null-character

14
推荐指数
1
解决办法
2602
查看次数

C++:关于空字符

有两个string变量,mn:

#include <string>

string m = "0100700\0"
cout << m.size() << endl; // it prints: 7

string n;
n += "0100700"
n += '\0';
cout << n.size() << endl; // it prints: 8
Run Code Online (Sandbox Code Playgroud)

我猜两个都有8个字符,但m只有7个字符,n有8个字符.为什么会这样?

c++ operators stdstring null-character double-quotes

11
推荐指数
2
解决办法
298
查看次数

在字符串中使用空字符(C++)

我正在刷我的C++,偶然发现了一个关于字符串,字符数组和空字符('\0')的奇怪行为.以下代码:

#include <iostream>
using namespace std;

int main() {
    cout << "hello\0there"[6] << endl;

    char word [] = "hello\0there";
    cout << word[6] << endl;

    string word2 = "hello\0there";
    cout << word2[6] << endl;

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

产生输出:

> t
> t
>
Run Code Online (Sandbox Code Playgroud)

幕后发生了什么?为什么字符串文字和声明的char数组存储't'at索引6(在内部之后'\0'),但声明的字符串不存在?

c++ arrays string null-character

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

Java BufferedWriter创建空字符

我一直在使用Java的BufferedWriter来写一个文件来解析一些输入.但是,当我打开文件后,似乎添加了空字符.我尝试将编码指定为"US-ASCII"和"UTF8",但我得到了相同的结果.这是我的代码片段:

Scanner fileScanner = new Scanner(original);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "US-ASCII"));
while(fileScanner.hasNextLine())
  {
     String next = fileScanner.nextLine();
     next = next.replaceAll(".*\\x0C", ""); //remove up to ^L
     out.write(next);
     out.newLine();
  }
 out.flush();
 out.close();
Run Code Online (Sandbox Code Playgroud)

也许问题甚至不是BufferedWriter?

我把它缩小到这个代码块,因为如果我将它注释掉,输出文件中就没有空字符.如果我在VIM中进行正则表达式替换,则该文件为null-character free(:%s /.*^ L // g).

如果您需要更多信息,请与我们联系.

谢谢!

编辑: 正常线的hexdump看起来像:0000000 5349 2a41 3030 202a

但是当运行此代码时,hexdump看起来像:0000000 5330 2a49 4130 202a

我不确定为什么事情变得混乱了.

编辑: 此外,即使文件与正则表达式不匹配并贯穿该代码块,它也会出现空字符.

编辑: 这是差异的前几行的十六进制:http: //pastie.org/pastes/8964701/text

命令是:diff -y testfile.hexdump expectedoutput.hexdump

其余的线条与最后两条线条不同.

java bufferedwriter null-character java.util.scanner

8
推荐指数
1
解决办法
1976
查看次数

在C++中存储非nul终止的C字符串常量

在任何人说,"不要这样做,因为它真的很糟糕".

  1. 我理解NUL终止字符串的原因.
  2. 我知道可以陈述类似的东西
    char mystr[] = { 'm', 'y', ' ', 's', 't', 'r', 'i', 'n', 'g'};
    但是,c-string表示的便利性太大了.

这样做的理由是我正在为微控制器编程,我需要将数据存储到程序的内存中.一些数据是字节,单词,双字和浮点数的形式.我希望数据包含没有NUL连续的字符串.

我已经尝试了将<size_t N,char*A><size_t N,char(&A)[N]>作为参数的模板,以便遍历数组并将其内容存储到静态数组中,但我不能似乎做对了.我认为标准可能实际上不允许这种情况在一般情况下是可以理解的,但在特定情况下是不幸的(具体来说,这个.;):()

如果我可以将字符串重新映射为类似boost :: mpl :: vector_c <char,...>模板的东西,那会更好,因为我有其他代码可以正确存储它,但是从模板中取消引用数组到用作const模板参数似乎也是不允许的.

有任何想法吗?

编辑:

Psudocode示例(这有点人为,因为实际代码要大得多,我也不会像这样逐字节读取,也不会使用文字迭代到字符串的末尾.这将嵌入到数据以及某处.):

// this stores bytes in an array
template<typename X, typename T, T ...numbers>
struct x
{
  static PROGMEM volatile const T data[];
};
template<typename X, typename T, T ...numbers>
PROGMEM volatile const T x<X, T, numbers...>::data[] = { numbers... };

void main()
{ …
Run Code Online (Sandbox Code Playgroud)

c++ string null-character

7
推荐指数
1
解决办法
446
查看次数

"\ 0"和"\ 0"之间的区别

我试图理解下面的一段代码,但我"\0"和之间感到困惑'\0'.我知道它很傻但善意帮助我

   #define MAX_HISTORY 20

   char *pStr = "\0";
   for(x=0;x<MAX_HISTORY;x++){
        str_temp = (char *)malloc((strlen(pStr)+1)*sizeof(char));
        if (str_temp=='\0'){
            return 1;
    }
    memset(str_temp, '\0', strlen(pStr) );
    strcpy(str_temp, pStr);
Run Code Online (Sandbox Code Playgroud)

c null-character

7
推荐指数
3
解决办法
2796
查看次数

带有 NUL 的 SQLite 字符串

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

sqlite null-character

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