gpt4 book ai didi

C - 不同方法中的指针和数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:35 25 4
gpt4 key购买 nike

对于学习如何使用指针等,我还是个新手,我想知道是否有人可以帮助我,因为我不确定如何做我想做的事情。

我想做的是有 3 个方法,一个 main,一个 getArray 和 printArray,getArray 应该使用指针。数组必须是二维的。例如:

void main() {
char *array[10];
array[0] = malloc(10);
getArray(&array[0]);
printArray(array[0]);
}

void getArray(char *array) {
scanf("%s", array); //or &array?
}

void printArray(char array[]) {
printf("%s", array);
}

我尝试使用上面的代码,当我用作输入时:“a”返回了这个

a
o
--------------------------------
Process exited after 0.3538 seconds with return value 2
Press any key to continue . . .

我对指针还是比较陌生,而且我不太确定如何使用它们。对不起。

在此先感谢您的帮助!

最佳答案

getArray(&array[0]); 您正在传递 char**

在您的程序中,您有未定义的行为传递了错误的参数 scanf()scanf() 尝试读取包含在 array 中的地址中的字符,该地址不是您分配的地址。这就是你得到未定义行为的原因。 scanf() 需要一个 char* 而您传递了 char**

解决方案:getArray(array[0]);

同样在方法中传递 array 也可以,因为它包含您将读取字符串的地址。


除此之外:

您没有检查应该检查的 malloc 的返回值。并在您完成使用后释放该内存。

如果你已经检查了警告那么它会说

note: expected ‘char *’ but argument is of type ‘char **’

这应该让您对正在发生的事情有足够的了解。

正如 Jonathan Leffler 所指出的,在使用它们之前还要声明(或定义)函数。正如所指出的那样,您将收到类型不匹配错误。这是 C99 或更高版本所必需的。 (C90 允许它 - 在声明之前调用一个函数)。考虑的隐式声明是 int getArray()

关于C - 不同方法中的指针和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47608538/

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