我有以下代码:
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”。我该怎么做?
谢谢。
最佳答案
您在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");
要比较整个字符串,还可以使用
strcmp
或strncmp
if (strncmp(transfer_encoding + 18, "\r\n", 2) == 0)
printf("CRLF found\n");
关于c - 访问指针C指向的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23877299/