如何解决* var [n]与* var[n]之差
我对char *<variable>[6]
和char (*<variable>)[6]
之间的区别有疑问。
我正在为一个练习编写代码,要求输入和存储6个字符串,然后将每个字符串转换为整数。我的计划是创建一个字符串数组来存储它们,而我做了char *<variable>[6] = malloc(7*sizeof(char));
,但出现了一个错误,说“数组初始值设定项必须是初始值设定项列表”,但是当我将其更改为char (*<variable>)[6] = malloc(7*sizeof(char));
时,它可以正常工作。 (*<variable>)[6]
和*<variable>[6]
有什么区别?
我的下面的代码:
#include <stdio.h>
#include <stdlib.h>
int main(void){
char (*sixString)m[6] = (char *) malloc(7 * sizeof(char));
int i;
int sum = 0;
for(i = 0; i < 6; i++){
printf("Input for the Number %d: ",i + 1);
scanf("%s",sixString[i]);
//fgets(sixString[i],100,stdin);
printf("%s\n",sixString[i]);
sum = sum + atoi(sixString[i]);
}
float average = (float)sum/6 ;
printf("Sum is: %d\nAverage is: %.2f\n",sum,average);
free(sixString);
return 0;
}
解决方法
char *<variable>[6]
是char*
的6元素数组。
char (*<variable>)[6]
是指向char
的6元素数组的指针。
您的代码分配的字节数不足。您应该使用
char (*sixString)[6] = malloc(7 * sizeof(char[6]));
或
char (*sixString)[6] = malloc(7 * sizeof(*sixString));
代替
char (*sixString)m[6] = (char *) malloc(7 * sizeof(char));
(大小是固定的,多余的m
已删除)
请注意,然后您分配了char[6]
的7个元素,但是在循环中仅使用了6个元素。
分配额外的元素可能看起来效率低下,但与分配不足的大小相比,所造成的危害要小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。