array name作为pointer可以跟其他pointer比较么

array name作为pointer可以和其他pointer比较么?想写一个function复制一个string source里面从第“start”个

array name作为pointer可以和其他pointer比较么?
想写一个function复制一个string source里面从第“start”个字符开始“count”个的那部分到string result里面去。比如puts(GetSubstring("12345",1,3,result));就会输出“234”
以下是不能成功运行的code:

是不是compiler会一直理解source是指向第一个元素的指针,而不管source是不是通过source++移位了??

成功的code:

char *GetSubstring(const char source[], int start, int count, char result[])
{
char *p = result;
while (*source && start--)
source++;
while (*source && count--)
*result++ = *source++;
*result = '\0';
return p;
}

[解决办法]
while (source < &source[start] && *source)这样的比较是不成立的,因为source++之后source和&source[start]都在增加。
[解决办法]
需要改成这样:

#include <stdio.h>

char *GetSubstring(const char source[], int start, int count, char result[])
{
char* p = (char*)source;
char* q = p;
char* r = result;

while((q < p + start) && *q)
q++;                                  
while((q < p + start + count) && *q)
*r++ = *q++;
*r = '\0';             
 
return result;
}

int main(int argc, char* argv[])
{
char result[32];

puts(GetSubstring("12345", 1, 3, result));

return 0;
}

[解决办法]

char * substr( char * buf, const char * str, int pos, size_t count) {
memcpy(buf, str + pos, count);
buf[count] = '\0';
return buf;
}

int main() {
char str[] = "hello world";
char buf[32];
printf("%s\n", substr(buf, str, 1, 10));


return 0;
}


[解决办法]
是的。

引用:
回复于: 2012-11-06 09:54:28  
while (source < &amp;source[start] &amp;&amp; *source)这样的比较是不成立的,因为source++之后source和&amp;source[start]都在增加。  

我可以理解成这样么? 因为&amp;source[start]相当于source+start……