我创建了一个字符串数组(chars的矩阵),并且我试图创建一个函数来读取字符串并将它们存储在数组中。这是我做的功能:
void input_strings(char **array, int n){
for (int i = 0; i < n; i++) {
scanf("%s",&array[i]);
printf("%s \n",&array[i]);
}
}
我添加了printf()来验证函数中的输入是否正常,并且确实printf()确实返回了我以前使用scanf()输入的内容。
但是当我尝试在输入函数之后访问数组字段时,在屏幕上会出现随机垃圾。这是我的主要功能:
int main() {
char string_array[n][stringsize];
input_strings(&string_array, n);
printf("%s",&string_array[1]);
return 0;
}
n和stringsize是足够大的全局变量。为什么程序会打印出����而不是我输入的字符串?
编辑:将矩阵从char ** string_array [n] [stringsize]编辑为charstring_array [n] [stringsize],问题仍然存在。
编辑2:所以问题是char矩阵与函数参数不兼容。我通过以下方式声明string_array来解决此问题。
char ** string_array = (char **) malloc(sizeof(char*)*n);
for (int i = 0; i < n; ++i) {
string_array[i] = (char *) malloc(sizeof(char)*stringsize);
}
同样以这种方式声明时,函数调用应如下所示:
input_strings(string_array, n);
答案 0 :(得分:-1)
是的,传递地址的正确方法只是string_array。因此,input_strings(string_array, n);
甚至是input_strings(&(string_array[0][0]), n);
,它是第一行第一列的地址。