【发布时间】:2020-11-23 20:52:19
【问题描述】:
我需要找到输入的消息的长度。我已将 msg 中的所有字符放入数组 msg[],但是当我检查此数组的大小时,结果为零。
感谢您的帮助。
#include <stdio.h>
#define SIZE ((int) (sizeof(msg)/sizeof(msg[0])))
int main(void){
int i = 0,j = 0;
char msg[i];
char ch = ' ';
printf("Please enter a msg you want traslated: ");
while(ch != '\n'){
scanf("%c",&ch);
if(ch == '\n'){
break;
}
i++;
msg[j] = ch;
j++;
}
printf("%d\n",SIZE);
return 0;
}
【问题讨论】:
-
msg[i]和i=0? -
int i = 0; char msg[i];尝试形成大小为 0 的可变长度数组是无效的 - 未定义的行为。一旦定义了一个数组,它的大小就不能改变。 -
将
char msg[i]更改为char msg[50]看看会发生什么。并不是说这是做任何事情的正确方法,但也许你会明白发生了什么。 -
大小和长度是 C 中的两个不同概念。大小通常是分配的数据结构的长度(在分配时固定)。长度是分配的数据结构中实际元素的数量(例如,字符串中的字符数,或数组中的整数数),它是可变的。
标签: c scope declaration variable-length-array