我有以下代码:
char * transfer_encoding;
char coso;
if (transfer_encoding = strstr(first_chunk.content, "Transfer-Encoding:")){
coso = *(transfer_encoding + 18);
printf(" %s ", coso);
}
它只搜索字符串“Transfer-Encoding:”,然后尝试访问“:”之后的值(18 = len(“Transfer-Encoding:”))。它给我一个读取地址0x0000020的访问冲突。为什么? 我想在“Transfer-Encoding”之后遍历字节以找到“\ r \ n”。
澄清问题。我想通过“Transfer-Encoding”之后的字节来查找“\ r \ n”。我该怎么做? 谢谢。
答案 0 :(得分:1)
您在Transfer-Encoding:
transfer_encoding + 18
取消引用
coso = *(transfer_encoding + 18);
并尝试将其解释为字符串
printf(" %s ", coso);
正确的方法是
printf(" %s ", transfer_encoding + 18);
没有解除引用它。
地址0x0000020
来自冒号后面的字符,通常是空格。这是ASCII中的32
或0x20
。
如果要查看该地址的内容,取消引用指针是完全有效的,例如
char cr = *(transfer_encoding + 18);
char nl = *(transfer_encoding + 18 + 1);
if (cr == '\r' && nl = '\n')
printf("CRLF found\n");
if (strncmp(transfer_encoding + 18, "\r\n", 2) == 0)
printf("CRLF found\n");
答案 1 :(得分:0)
编译器可能会警告你这个代码。
你在结肠后拿着角色而不是指向那里:
char *transfer_encoding;
char *coso;
if (transfer_encoding = strstr(first_chunk.content, "Transfer-Encoding:"))
{
coso = transfer_encoding + 18;
printf(" %s ", coso);
答案 2 :(得分:0)
当内容中不存在字符串“Transfer-Encoding:”时,函数strstr返回null,当发生这种情况时,您会收到访问冲突。尝试检查指针是否为空,然后继续这样:
char * transfer_encoding;
char * coso;
if ((transfer_encoding = strstr(first_chunk.content, "Transfer-Encoding:"))){
if (transfer_encoding != NULL){
coso = transfer_encoding + 18;
printf(" %s ", coso);
}
}
希望它有所帮助!
编辑:很好,那么你的指针有另一个问题,你明确地从字符串中取出1个字符而不是指向字符串中剩下的任何内容,请再试一次