使用增加的ASCII值处理字符串中的多个'\ 000'

时间:2013-03-23 17:45:35

标签: c string data-structures

我正在开发一个应用程序,其中我遇到了包含多个'\ 000'终止字符的字符串。我想在字符串中使用该空字符。 当处理这个时,字符串仅在'\ n''终止,所以我试图增加它的ASCII值。但是当我这样做时,我得到了分段错误。

我在下面写了代码段

 char *content; 
 content = malloc(8);
 content = "\037\000\000\000\000\037\037\037";
 int content_length = 8;
 content[1] = content[1] + 1;    // Increasing the ASCII value

如果我删除增加ASCII值的最后一行,我的应用程序只收到1个字节。所以更改了第二个字节(内容[1])然后应该传输2个字节,但是我得到了分段错误。

我做错了吗?十六进制或八进制数是否构成这样的东西?

由于

3 个答案:

答案 0 :(得分:3)

"\037\000\000\000\000\037\037\037"

是一个字符串文字。字符串文字在C中是不可修改的。写入字符串文字是未定义的行为。

然后:

content = malloc(8);
content = "\037\000\000\000\000\037\037\037";

你从malloc获得了一些内存,但你要覆盖你的指针对象,使其指向其他地方(字符串文字),这称为内存泄漏

答案 1 :(得分:1)

  

我做错了吗?

当然。首先,您将content指针重新分配给其他内容,实际上泄漏已分配的内存。

其次,引号之间的字符串是不能修改内容的字符串文字。您的程序调用未定义的行为。

答案 2 :(得分:1)

您需要创建存储空间。使用它初始化数组:

char content[] = "\037\000\000\000\000\037\037\037";

或者如果您想使用malloc而不是数组,可以使用memcpy复制确切的字节数:

memcpy(content, "\037\000\000\000\000\037\037\037", 8);