我对一个非常简单的函数感到生气,因为它读取了输入中给出的字符串数组。 我也知道如何读取字符串并将它们放入数组而不编写适当的函数(在main()中编写所有东西)。 这就是我使用的例子。
我认为主要的障碍是正确使用三星指针。
#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;
}
答案 0 :(得分:1)
您需要注意两件事:运营商优先级和间接级别。如果您不知道哪个运算符的优先级高于另一个运算符,请将变量括在括号中:
#include <stdio.h>
#include <stdlib.h>
int read(char ***a, int *len)
{
scanf("%d", len);
if (*len <= 0) return 1;
*a = (char **)malloc(*len * sizeof(char *));
if (*a == NULL) return 1;
for (int i = 0; i<*len; i++) {
(*a)[i] = (char *)malloc(101 * sizeof(char)); // note this line
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]);
//system("PAUSE");
return 0;
}