我对C很陌生,我只是点了指针,我一直在做练习,我在这个网站和谷歌上到处找,但是我找不到我要找的东西。(可能是因为缺乏术语方面的经验)
上下文--我必须使用一个特定的原型(分级程序使用的)来传递一个字符串数组,但是,由于每个函数仅限25行,所以我尝试将相同的字符串数组传递给另一个函数,但没有效果,所以这是我的解决办法:
#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函数之间的数组)?
编辑:如果有帮助的问题。(我只想知道怎么回事)
int ft_ultimate_range(int **range, int min, int max);发布于 2021-07-21 22:31:09
正如注释中指出的那样,*range[i]可以被理解为*(range[i]),遵循运算符优先的规则。这意味着您正试图进入与调用方提供的地址相邻的内存中。
使用(*range)[i],或者简单地使用您前面创建的arr变量,就可以解决这个问题。
while (i < max) {
arr[j] = i;
i++;
j++;
}这样说,您的代码就会稍微复杂一些。虽然我不完全同意函数的行限制的想法,但是如果这些是您将要学习的约束,那么您将尝试将问题分解为它们最简单的组件&所需的步骤。
我们需要的唯一附加变量是范围的计算length,以及我们要插入值的index。由于使用length,没有必要转换计算的隐式转换。min已经提供了我们的起始值。
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')。
字符串示例:
const char *foo = "hello, world";
char bar[] = "Alice";
char baz[] = { 'B', 'o', 'b', '\0' };代码中没有字符串。通过查看main函数及其第二个参数,可以找到传递字符串数组的示例。
https://stackoverflow.com/questions/68476658
复制相似问题