C - 读取并分配任意字符串数组
C - Read and allocate an arbitrary array of strings
我对读取输入中给定的字符串数组的一个非常简单的函数很生气。
我也知道如何在不编写适当的函数(将所有内容写入 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;
}
您需要注意两件事:运算符优先级和间接级别。如果您不知道哪个运算符的优先级高于另一个,请将您的变量括在括号中:
#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;
}
我对读取输入中给定的字符串数组的一个非常简单的函数很生气。 我也知道如何在不编写适当的函数(将所有内容写入 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;
}
您需要注意两件事:运算符优先级和间接级别。如果您不知道哪个运算符的优先级高于另一个,请将您的变量括在括号中:
#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;
}