我想检查一个数组的大小(填充大小)。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char name[10];
puts("Write your name");
scanf("%2s", name); //test
size_t n = sizeof name / sizeof *name;
printf("size: %d",n); //result 10
}
我想得到结果4(用于测试)
答案 0 :(得分:6)
数组的大小不会改变。它将始终显示为阵列分配的字节数。你需要的是字符串的长度,你可以使用函数strlen
来获取它。
答案 1 :(得分:2)
strlen函数应该可以完成你的工作。
答案 2 :(得分:0)
一些基础知识:
OP:你为什么把%2s格式说明符放在scanf中?
------&GT;它允许您仅将字符串的前两个字符作为输出。 使用简单的scanf%s。
现在回答:
用字符串填充字符数组:
在存储器阵列(一个连续的存储器块)中看起来像这样
---------------------------------------------------------
| 't' | 'e' | 's' | 't' | '\0' | Rest all are also '\0' |
---------------------------------------------------------
0 1 2 4 5 6 7 8 9
sizeof(array)会给你数组的大小,即10,因为char的大小= 1。
sizeof(char * array)给出数组第一个元素的大小,即char(size = 1)。
因此,您得到结果10.将数组大小除以其元素的大小将为您提供整个块的大小。
获取填充数组的大小:
搜索数组中的第一个空字符。
int i=0;
for(i=0;i<10;i++)
{ if(name[i]==NULL) break; }
printf("Size is %d\n",i);
或者使用string.h库中包含的strlen函数来为你完成。
#include <string.h> {......... printf("Size is %d\n",strlen(name));......}