【发布时间】:2018-03-21 18:39:22
【问题描述】:
我对一个非常简单的函数很生气,它可以读取输入中给出的字符串数组。 我也知道如何读取字符串并将它们放入数组中,而无需编写适当的函数(在 main() 中写入所有内容)。 这是我正在使用的示例。
我认为主要的障碍是正确使用 3 星指针。
#include <stdio.h>
#include <stdlib.h>
int read(char ***a, int *len){
scanf("%d", len);
if(*len <= 0) return 1;
*a = malloc(*len * sizeof(char *));
if(*a == NULL) return 1;
for(int i=0; i<*len; i++){
a[i] = malloc(101 * sizeof(char));
scanf("%s", *a[i]);
}
return 0;
}
int main(){
int len, i;
char **A;
// read an array of strings
if( read(&A, &len)) return 1;
// DO SOMETHING
for(i=0; i<len; i++)
printf("%s\n", A[i]);
return 0;
}
【问题讨论】:
-
啊,三星级程序员!
-
为什么?这有什么不好?
-
使用
***通常不被认为是最简洁的设计,尤其是对于绝对初学者而言。 -
如果您创建局部变量 (
char **local_a; int local_len;) 并在整个函数中使用它们,事情就会变得不那么混乱。然后,在函数退出之前,分配它们:`*a = local_a; *len = local_len; -
消除
***的一种方法是让函数返回一个数组:char ** read(int *len) {...}