善哉!我是傻逼
first of all,先重新来看sizeof函数,它返回的是你括号里面的总字节数,这并不等于该数组的元素个数
int arr[999]; // 定义一个包含999个整型元素的数组
// 从标准输入读取一个整数并存储到数组的第一个元素中
scanf("%d", arr[0]);
// 计算数组的元素个数
int size = sizeof(arr) / sizeof(arr[0]);
// 输出数组的元素个数
printf("%d", size);
return 0; // 返回0表示程序正常结束
sizeof(arr)
返回整个数组的字节数,sizeof(arr[0])
返回单个元素的字节数。两者相除可得到数组的元素个数。但是,数组的大小由其声明时的大小决定,而不是由实际使用的元素数量决定的。因此,sizeof(arr)
会返回整个数组的大小,而不是你实际使用的元素数量,两者相除也不可能得到实际使用的元素数量值
所以呢?你定义的char数组可以用strlen函数(它还非常友好地不会带上字符结束符\0)
唉,先来一步一步说吧
char str[999];
scanf("%s",str);
return 0;
在C语言中,使用scanf("%s", str);
来读取字符串时,实际上不需要使用&
运算符,因为str
本身就是一个指向字符数组首元素的指针。正确的用法是直接使用str
同时,scanf函数可能会因为缓冲区溢出导致报错,为了避免这种情况,可以使用 scanf
的限制功能,例如 scanf("%998s", str);
,这样可以确保最多读取998个字符()
为什么不能是%999s?因为最后需要留出一个字符的位置来存储字符串的结束标志 '\0'
(空字符)
同时,别的类型的数组或者你定义的变量也可以这样使用,scanf中%后面紧接的数字表示最大读取的单位数量(我感觉这样用词很标准!),而printf中则是总宽度
字符数组中如果你想要存储数字 11 和 12 这样的多个数字,并且能够单独输出它们,你需要以某种方式将它们分隔开(比如空格、逗号),并且切割字符串,这会使简单的东西变得极其复杂,所以,为什么不用int、double这些类型的数组呢?
你为什么傻逼地要先考虑去用动态分配!(<stdlib.h>
头文件中定义了动态内存分配的相关函数,包括 malloc
、calloc
、realloc
和 free
)
你可以定义一个变量当作一个计数器啊!
循环里面做两件事情,一个是存数据,另一个则是计数!
我真傻,真的,我单知道下雪的时候野兽在山坳里没有食吃......
Comments NOTHING