2014-02-28 44 views
-3
#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”,美国广播公司),那么它应该打印20如何为c语言中的数组元素赋值?

+2

'%d'打印整数,而不是字符串。 –

+1

'“如果变量[count]包含一个字符串abc,那么我想将20赋给abc”'...所以..你想要一个字符串数组,然后你想给一个字符串赋一个整数?你的意思是'abc'是一个变量或者一个字符串'“abc”'?你的意思是包含“20”的字符串吗? – Mike

+0

是的,abc应该被当作一个变量来处理,并且被分配一个整数值20 – user3365619

回答

0

类型variablechar **,则variable应该指向char *的列表,而不是char的列表。因此,variable=(char **)malloc(sizeof(char)*100);应该是variable=(char **)malloc(sizeof(char *)*100);

顺便说一句,在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 */ 
1

这里

variable=(char **)malloc(sizeof(char)*100); 
要分配指针,所以specifiy指针的正确尺寸

,即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)