我还是新学习如何使用指针等等,我想知道是否有人可以帮助我,因为我不知道我怎么能做我想做的事。
我要做的是有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 . . .
我仍然是指针的新手,我不确定如何使用它们。遗憾。
提前感谢您的帮助!
答案 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()
。