2012-11-25 31 views

Trả lời

10
  1. sizeof() trả về kích thước theo yêu cầu của loại. Kể từ khi loại bạn vượt qua để sizeof trong trường hợp này là một con trỏ, nó sẽ trả về kích thước của con trỏ.

    Nếu bạn cần kích thước của dữ liệu được trỏ bởi một con trỏ, bạn sẽ phải ghi nhớ nó bằng storing it explicitly.

  2. sizeof() hoạt động ở thời gian biên dịch. vì vậy, sizeof(ptr) sẽ return 4 or 8 bytes thường. Thay vào đó hãy sử dụng strlen.

30

Sử dụng strlen để tìm chiều dài của (số nhân vật trong) một chuỗi

const char *ptr = "stackoverflow" 
size_t length = strlen(ptr); 

một điểm nhỏ, lưu ý rằng ptr là một chuỗi chữ (một con trỏ tới bộ nhớ const mà không thể được sửa đổi). Thực hành tốt hơn của nó để tuyên bố nó là const để hiển thị điều này.

+1

+1 cho 'size_t' – iabdalkader

+1

+1 cho hai thực hành tốt, gán chuỗi ký tự cho' const char * 'và sử dụng' size_t' – effeffe

+0

Thật vậy - chỉ cần cẩn thận nếu mục tiêu không phải là một chuỗi kết thúc null, điều này sẽ đo lường cho đến khi nó ngẫu nhiên tìm thấy một null trong bộ nhớ, hoặc kích hoạt một lỗi bảo vệ bộ nhớ trong quá trình tìm kiếm đó. Và tất nhiên (như những người khác đã chỉ ra) giá trị trả về không bao gồm kích thước của null kết thúc. –

1

Bạn có thể thử sử dụng:

char *ptr = "stackoverflow" 
size_t len = strlen(ptr); 
5

Các strlen() chức năng được cung cấp bởi string.h mang đến cho bạn có bao nhiêu "nhân vật thật" chuỗi chỉ bởi đối số chứa. Tuy nhiên, độ dài này không bao gồm ký tự null kết thúc '\0'; bạn phải xem xét nó nếu bạn cần độ dài để cấp phát bộ nhớ.

Rằng 4 byte là kích thước của con trỏ đến char trên nền tảng của bạn.

0

nếu chiều dài ptr là đối số của hàm, sử dụng con trỏ làm chuỗi là hợp lý. chúng ta có thể có được chiều dài chuỗi bằng đoạn mã sau:

char *ptr = "stackoverflow"; 
length=strlen((const char *)ptr); 

Và đối với giải thích thêm, nếu chuỗi là một chuỗi đầu vào bởi người sử dụng với độ dài thay đổi, chúng ta có thể sử dụng đoạn mã sau:

unsigned char *ptr; 
ptr=(unsigned char *)calloc(50, sizeof(unsigned char)); 
scanf("%s",ptr); 
length=strlen((const char *)ptr); 
1
#include<stdio.h> 
main() 
{ 
    int mystrlen(char *); 
    char str[100]; 
    char *p; 
    p=str; 
    printf("Enter the string..?\n"); 
    scanf("%s",p); 
    int x=mystrlen(p); 
    printf("Length of string is=%d\n",x); 


} 
int mystrlen(char *p) 
{ 
    int c=0; 
    while(*p!='\0') 
    { 
     c++; 
     *p++; 
    } 
    return(c); 
} 

mã đơn giản để hiểu

0

Hoàn toàn sử dụng con trỏ, bạn có thể sử dụng số học con trỏ:

int strLen(char *s) 
{ 
    int *p = s; 
    while(*p !=’\0’) 
    { 
     p++; /* increase the address until the end */ 
    } 
    Return p – s; /* Subtract the two addresses, end - start */ 
} 
Các vấn đề liên quan