我对如何使用指针之类的东西还很陌生,我想知道是否有人能帮我,因为我不知道我怎么能做我想做的事情。
我要做的是有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 - C-不同方法中的指针和数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47608538/

10-11 21:30