我有以下代码:

    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中的320x20



如果您想查看该地址的内容,则取消引用指针是完全有效的,例如

char cr = *(transfer_encoding + 18);
char nl = *(transfer_encoding + 18 + 1);
if (cr == '\r' && nl = '\n')
    printf("CRLF found\n");


要比较整个字符串,还可以使用strcmpstrncmp

if (strncmp(transfer_encoding + 18, "\r\n", 2) == 0)
    printf("CRLF found\n");

关于c - 访问指针C指向的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23877299/

10-12 16:25