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

时间:2017-12-02 13:45:44

标签: c arrays pointers

我还是新学习如何使用指针等等,我想知道是否有人可以帮助我,因为我不知道我怎么能做我想做的事。

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

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 . . .

我仍然是指针的新手,我不确定如何使用它们。遗憾。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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()