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:
成功的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;
}
[解决办法]
是的。
