2013-11-23 48 views
0

我想检查一个数组的大小(填充的大小)。C数组的长度(填充)

#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

因为name是test => scanf(“%2s”,name); //输入“test” – user1012535

+0

我想在downvoting之前检查OP的声望点是很好的。根据OP,他没有答案并且已经尝试过并且在他的搜索中用错误的关键词进行探测 – rjv

回答

2

string.h中的strlen函数应该做你的工作。

6

数组的大小不会改变。它将始终显示为阵列分配的字节数。你需要的是字符串的长度,你可以使用函数strlen得到它。

+0

更准确地说,对于一个静态声明大小的数组,它将返回数组中的元素数。 (这恰好等于'char'类型的数组的字节数,但值得明确的是操作符是干什么的。) –

+0

对于它数组,它不会返回元素个数 –

0

一些基本知识:

到OP:为什么你把scanf函数的%2S格式说明?

------>它允许您只将字符串的前两个字符作为输出。 使用简单的scanf%s。

现在的答案:

填充字符数组,字符串:

在存储阵列(一个continguous内存块)看起来像这样

 --------------------------------------------------------- 
     | 't' | 'e' | 's' | 't' | '\0' | Rest all are also '\0' |     
     --------------------------------------------------------- 
     0  1  2  4  5  6  7  8  9  

和sizeof(阵列)会给你数组的大小,即10,因为char的size = 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));......}