gpt4 book ai didi

c - 字符串指针的子字符串指针

转载 作者:行者123 更新时间:2023-11-30 16:56:58 25 4
gpt4 key购买 nike

我对 C 还很陌生,并且在以下方面遇到困难。

Consider a string (pointer to an array of characters), containing an arbitrary amount of unsigned bytes, in our case, let it be programming. Write a function, which returns a pointer to a new location in memory (but not allocated with malloc), containing the substring of arbitrary but fixed size, at an arbitrary offset - in our case, let it be gramm.

我尝试了以下方法:

unsigned char* newptr(unsigned char* p, int offset, int size) {
unsigned char r[size];
memcpy(r, p + offset, size + 1);
return r;
}

但它出现段错误错误。否则

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;
}

关于c - 字符串指针的子字符串指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39712135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com