2015-03-13 3 views
0
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    char *p; 
    p=calloc(10,sizeof(char)); 
    printf("the address of pointer is %p and size of the string is %d",p,strlen(p)); 
    return 0; 
} 

я выделено 10 байт памяти в куче с помощью calloc и я ожидаем, что выход размера будет 10, но выходнеожиданного выход при использовании функции STRLEN

the address of pointer is 0x123e010 and size of the string is 0 

почему размер равен 0, а не 10

ответ

1

strlen просто подсчитывает количество байтов, значение которых не равно 0x00 (также известный как NULL, который стандарт C использует для терминатора строк).

calloc Поскольку инициализирует память для 0x00 после выделения его, strlen возвращает 0, потому что первый байт находится уже NULL.

 Смежные вопросы

  • Нет связанных вопросов^_^