2013-06-19 90 views
1

我将在形式减去两个char指针

-----------------------------41184676334 

Some Content 
More Content 



-----------------------------41184676334 

More ContenT!! 

一个变量,将存储的边界标记的输入缓冲器------------------ ----------- 41184676334

我想知道这两个界碑之间的长度

这里是我做过什么

char *temp, *temp1; 

temp = strstr(input,boundarymarker); 
temp1 = strstr(temp+ strlen(boundarymarker),boundarymarker); 

int length = temp1-temp; 

长度换货政... rns一个负值。难道只是减去?如果不是什么正确的解决方案?它返回的价值是什么?

+0

指针的大小与int相同吗? (请检查sizeof。)另外,这里是'bounarymarker'的拼写错误,还是您的原始资料来源? –

+0

@MrLister这是一个错字。我did not你 – user1692342

+0

@user我编译你的代码(以及“input”和“boundarymarker”的声明),我得到64作为'length'的值。 – gcbenison

回答

5

在两个strstr调用之一中未找到最可能的边界标记。你可以检查温度和temp1的NULL吗?

+0

找到边界标记。 temp和temp1都有有效值 – user1692342

+1

@ user1692342你能打印出十六进制的temp和temp1的值吗?可能会流露出一些光芒。 –

0

尝试使用strpos找到第一次出现的标记,然后使用它找到第二次出现并减去这些结果。

int pos1 = strpos(temp, marker); 
int pos2 = strpos(temp + pos1 + strlen(marker), marker); 
printf(" %d ", pos2 - pos1); 
+5

'strpos'?这不在标准库中。为什么使用非标准的东西,如果标准的'strstr'是为了它呢? –

+0

嗯,这是真的,但它可能会使事情比使用指针算法来得到一个更清晰的长度..(所以,只是为了清楚起见,也许,为OP提供一个替代方案,他们可能会测试,然后恢复使用'strstr ')。 – teodron

0

取决于你的编译器/标志int可能会或可能不会是一个足够大的存储容器,以便容纳一个指针的区别。

如果使用数字指针值,则使用intptr_t类型。根据定义,它保证足够大以容纳一个指针值。

#include <stdint.h> 

intptr_t length = (intptr_t)temp1 - (intptr_t)temp;