首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问和修改函数中的字符串数组?

如何访问和修改函数中的字符串数组?
EN

Stack Overflow用户
提问于 2021-07-21 21:29:09
回答 1查看 206关注 0票数 0

我对C很陌生,我只是点了指针,我一直在做练习,我在这个网站和谷歌上到处找,但是我找不到我要找的东西。(可能是因为缺乏术语方面的经验)

上下文--我必须使用一个特定的原型(分级程序使用的)来传递一个字符串数组,但是,由于每个函数仅限25行,所以我尝试将相同的字符串数组传递给另一个函数,但没有效果,所以这是我的解决办法:

代码语言:javascript
复制
#include <stdlib.h>

int ft_ultimate_range(int **range, int min, int max)
{
    int *arr;
    int i;
    int j;

    j = 0;
    i = min;
    if (min >= max)
    {
        *range = NULL;
        return (0);
    }
    arr = malloc(sizeof(int) * ((long long int)max - (long long int)min));
    *range = arr;
    if(arr == NULL)
        return (-1);
    while (i < max)
    {
        *range[j] = i;
        i++;
        j++;
    }
    return (j);
}

不过,我在EXC_BAD_ACCESS / seg上获得了vs代码的code=1。在终端上执行时出错。

我不明白为什么这是因为我试图将值赋值给传递的数组,如果我去掉星星,我就会得到(不兼容的int到指针转换,将'int *‘从’int‘分配给’int*‘)。

怎么一回事?

另外,请您也向我指出一个线程,说明如何传递字符串数组(或int函数之间的数组)?

编辑:如果有帮助的问题。(我只想知道怎么回事)

  • 创建一个函数ft_ultimate_range,它分配和分配一个ints数组。
  • 这个int数组应该包含min和max之间的所有值。包括-最大限度排除。
  • 下面是如何对其进行原型化: int ft_ultimate_range(int **range, int min, int max);
  • 范围的大小应该返回(或-1错误)。*如果min的值大于或等于max的值,范围将指向NULL,并应返回0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-21 22:31:09

正如注释中指出的那样,*range[i]可以被理解为*(range[i]),遵循运算符优先的规则。这意味着您正试图进入与调用方提供的地址相邻的内存中。

使用(*range)[i],或者简单地使用您前面创建的arr变量,就可以解决这个问题。

代码语言:javascript
复制
while (i < max) {
    arr[j] = i;
    i++;
    j++;
}

这样说,您的代码就会稍微复杂一些。虽然我不完全同意函数的行限制的想法,但是如果这些是您将要学习的约束,那么您将尝试将问题分解为它们最简单的组件&所需的步骤。

我们需要的唯一附加变量是范围的计算length,以及我们要插入值的index。由于使用length,没有必要转换计算的隐式转换min已经提供了我们的起始值。

代码语言:javascript
复制
size_t range(int **dest, int min, int max) {
    if (min >= max)
        return *dest = NULL, 0;

    size_t length = max - min;

    if (!(*dest = malloc(sizeof **dest * length)))
        return -1;

    for (size_t i = 0; i < length; i++)
        (*dest)[i] = min++;

    return length;
}

注意,在这个例子中,我使用了size_t作为它

..。可以存储任何类型的理论上可能的对象(包括数组)的最大大小。

是索引所述数组最合适的类型。但是,您需要将size_t的每个实例更改为符合您的规范的int

在C中,https://en.cppreference.com/w/c/string/byte指的是非零字节序列,后面是NUL终止字节('\0')。

字符串示例:

代码语言:javascript
复制
const char *foo = "hello, world";
char bar[] = "Alice";
char baz[] = { 'B', 'o', 'b', '\0' };

代码中没有字符串。通过查看main函数及其第二个参数,可以找到传递字符串数组的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68476658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档