![](/img/trans.png)
[英]How to pass the pointer to a string, pointer to a substring, and return something else?
[英]Pointer of substring from pointer of string
我对C还是很陌生,并在以下方面作斗争。
考虑一个字符串(指向字符数组的指针),其中包含任意数量的无符号字节,在我们的示例中,将其设置为
programming
。 编写一个函数,该函数返回一个指向内存中新位置的指针(但未使用malloc
分配),该malloc
包含任意大小但固定大小的子字符串,且具有任意偏移量-在本例中为gramm
。
我尝试了以下方法:
unsigned char* newptr(unsigned char* p, int offset, int size) {
unsigned char r[size];
memcpy(r, p + offset, size + 1);
return r;
}
但由于Segmentation fault
而出错。 除此以外
unsigned char* newptr = oldptr + offset;
可以工作,但不能解决固定大小的问题-我不希望其余字符属于指针。
在此先感谢您,如果您之前提出过这个问题,对不起,我什么也找不到帮助。
一些可能的解决方案,它们都不是最优的:
使用全局缓冲区 (使用全局变量是一种不好的做法,如果再次调用该函数,它将重写缓冲区,缓冲区的大小固定,并且必须大于您的大小):
unsigned char r[100000];
unsigned char* newptr(unsigned char* p, int offset, int size) {
memcpy(r, p + offset, size);
r[size] = '\0';
return r;
}
使用静态本地缓冲区 (与使用全局缓冲区的解决方案几乎存在相同的问题):
unsigned char* newptr(unsigned char* p, int offset, int size) {
static unsigned char r[100000];
memcpy(r, p + offset, size);
r[size] = '\0';
return r;
}
将输入变量的内存用作缓冲区(问题是* p在函数调用后发生更改)
unsigned char* newptr(unsigned char* p, int offset, int size) {
p[offset + size] = '\0';
return p + offset;
}
将分配的缓冲区传递给函数:
unsigned char* newptr(unsigned char* p, int offset, int size, unsigned int* r) {
memcpy(r, p + offset, size);
r[size] = '\0';
return r;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.