#include <malloc.h>
void main()
{
char **variable;
int count=0
variable=(char **)malloc(sizeof(char *)*100);
for(i=0;i<100;i++)
variable[i]=(char *)malloc(sizeof(char)*11);
scanf("%s",variable[count]);
}
现在我想为变量[count]中的字符串赋值
例如:如果variable[count]
包含字符串“abc”,那么我想将20分配给abc
如果我使用printf(“%d”,abc)那么它应该打印20
答案 0 :(得分:1)
下面
variable=(char **)malloc(sizeof(char)*100);
你想要分配指针,所以指定正确的指针大小,即char*
,如下所示:
variable = malloc(100 * sizeof(char*));
甚至更好:
variable = malloc(100 * sizeof(*variable));
顺便说一句:在C中,不需要投射malloc/calloc/realloc
的结果,也不建议使用。
遵循上述规则/建议,此行
variable[i]=(char *)malloc(sizeof(char)*11);
最好看起来像这样
variable[i] = malloc(11 * sizeof(*variable[i]));
最后这个电话很危险:
scanf("%s",variable[count]);
因为它往往会溢出variable[count]
,所以通过告诉scanf()
以多少扫描为最大值来保存它:
scanf("%10s", variable[count]); /* Leave one (10=11-1) spare for the C-"string"'s 0-terminator. */
它是
int main(void)
答案 1 :(得分:0)
variable
的类型为char **
,然后variable
应指向char *
的列表,而不是char
的列表。
因此,variable=(char **)malloc(sizeof(char)*100);
应为variable=(char **)malloc(sizeof(char *)*100);
。
BTW,malloc()
之前的类型转换是不必要的。
现在我想为变量[count]中的字符串赋值,例如:如果变量[count]包含字符串“abc”,那么我想将20分配给abc,如果我使用printf(“%d” “,abc)然后它应该打印20
您希望将variable[count]
的值视为变量。不幸的是,你做不到。 C是一种静态编程语言,这意味着您无法像在动态编程语言中那样在运行时创建变量。
但是C足够强大,可以让你模拟这个。您可以创建一个查找表,例如
typedef struct var {
char *name;
int val; /* or whatever type you want */
} var_t;
var_t variable[num_of_vars]; /* or whatever data structure that you can search */