让我们说我的函数有一个char数组作为参数,char *作为返回类型。我想返回一个指向参数数组的子数组的指针。
例如:char str[] = "hi billy bob";
我希望我的函数返回"billy bob"
;
让我们在我的功能正文中说我能够获得索引 我希望子阵列开始的地方。
char* fun(const char s1[]) {
int index = a random int;
/* char *p = *(s1[index1]); */
return p;
}
我在注释掉的线路上遇到了麻烦。
答案 0 :(得分:1)
只需使用
const char *p = &str[index]; /* may also write p = str + index */
return p;
以上获取索引index
处字符的地址 - 这是从此索引开始的char数组的指针。该字符串将一直持续到第一个'\0'
字符,该字符是原始str
的结尾。
在您的情况下,如果您希望输出为“billy bob”(请注意,除非您修改字符串或返回新字符串,否则无法更改大小写),您应该设置index = 3;
。
当您想要获取str
的子字符串时,它会更加复杂。然后,您必须设置str[end_index]='\0'
或使用malloc
分配新数组并复制相关部分。
在C中,表达式a[i]
等同于*(a+i)
。即,取指针a
,向前移动i
元素(char
s),然后在结果地址返回元素。
如果您使用a[i]
运算符添加前缀&
以获取该字符的地址。因此&a[i]
可以写为&*(a+i)
。运营商&'并且'*'相互取消,您将留下a+i
。
答案 1 :(得分:-1)
你想要的是这个
char *random_sub_string(const char *string)
{
size_t length;
if (string == NULL)
return NULL;
length = strlen(string);
return string + rand() % length;
}