返回指向子数组的指针

时间:2015-10-10 05:03:11

标签: c arrays string pointers

让我们说我的函数有一个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;
}

我在注释掉的线路上遇到了麻烦。

2 个答案:

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