2013-03-23 114 views
0

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

我有以下为

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个字节,但是我得到了分段错误。

我做错了什么?十六进制或八进制数字是否做出这样的事情?

感谢

回答

1

您需要创建存储。无论是初始化数组与它:

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

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

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

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

然后:

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

你从malloc一些内存,但你要覆盖指针对象,使它指向elsewehere(字符串文字),这就是所谓的一个内存泄露

1

我做错了什么?

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

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