2010-11-15 99 views
36

Một cách trong C mà ai đó có thể tìm thấy độ dài của một mảng Ký tự là gì?Tìm chiều dài của một Mảng nhân vật trong C

tôi sẽ vui vẻ chấp nhận psuedo-mã, nhưng không phải không thích một ai đó viết nó ra nếu họ muốn :)

+0

Bạn có nghĩa khác hơn là tìm kiếm các NUL? –

+3

Hoặc là 'strlen()', hoặc 'sizeof()'. Nó phụ thuộc vào những gì bạn cần. – ruslik

+0

một chuỗi là một loại đối tượng cụ thể được lưu trữ * trong * một mảng Ký tự (một mảng Ký tự không được chứa chuỗi) –

Trả lời

56

Cung cấp các mảng char được null chấm dứt,

char chararray[10]; 
size_t len = strlen(chararray); 
+5

'sizeof()' asnd 'strlen()' cả hai đều trả về 'size_t', khác với' int' ở chỗ nó có khả năng lớn hơn hoặc nhỏ hơn và chắc chắn không dấu. –

+0

Cảm ơn bạn đã làm việc tốt – Sam

0

Bằng cách nói "Ký tự mảng" bạn có nghĩa là một chuỗi? Giống như "hello" hoặc "hahaha đây là một chuỗi ký tự" ..

Dù sao, hãy sử dụng strlen(). Đọc một chút về nó, có rất nhiều thông tin về nó, như here.

+1

Nếu nó là chữ cái hoặc chữ 'char [#]', bạn có thể sử dụng 'sizeof', nhưng hãy cẩn thận không thử sử dụng nó trên' char * ' –

+0

Nếu bạn sử dụng' sizeof', đừng quên trừ 1 cho null terminator. – dan04

+0

@ dan04: Chỉ khi mảng được khởi tạo với độ dài ngầm như trong 'char s [] =" sup ";'. –

10

Nếu bạn có một mảng, sau đó bạn có thể tìm số phần tử trong mảng bằng cách chia kích thước của mảng bằng byte bởi kích thước của mỗi phần tử trong byte:

char x[10]; 
int elements_in_x = sizeof(x)/sizeof(x[0]); 

Đối với trường hợp cụ thể của char, kể từ sizeof(char) == 1, sizeof(x) sẽ mang lại kết quả tương tự.

Nếu bạn chỉ có con trỏ đến mảng, thì không có cách nào để tìm số phần tử trong mảng được trỏ tới. Bạn phải tự theo dõi điều đó. Ví dụ: được cung cấp:

char x[10]; 
char* pointer_to_x = x; 

không có cách nào để chỉ từ pointer_to_x mà nó trỏ đến một mảng gồm 10 phần tử. Bạn phải tự theo dõi thông tin đó. Có rất nhiều cách để làm điều đó: bạn có thể lưu trữ số lượng các phần tử trong một biến hoặc bạn có thể mã hóa nội dung của mảng sao cho bạn có thể nhận được kích thước bằng cách phân tích nội dung của nó. các chuỗi đã được thực hiện: chúng đặt một ký tự '\0' ở cuối chuỗi để bạn biết khi nào chuỗi kết thúc).

+0

'sizeof()' asnd 'strlen()' cả hai đều trả về 'size_t', khác với' int' ở chỗ nó có khả năng lớn hơn hoặc nhỏ hơn và chắc chắn không dấu. –

+0

@ Chris Lutz: Đúng vậy. –

2

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

strlen(urarray); 

Bạn có thể mã hóa nó cho mình để bạn hiểu cách thức hoạt động

size_t my_strlen(const char *str) 
{ 
    size_t i; 

    for (i = 0; str[i]; i++); 
    return i; 
} 

nếu bạn muốn kích thước của mảng sau đó bạn sử dụng sizeof

char urarray[255]; 
printf("%zu", sizeof(urarray)); 
+2

Mọi 'strlen()' sẽ trả về 'size_t' (không được ký) không phải' int' (được ký). Và 'printf()' specifier cho 'size_t' là' "% zu" '(hoặc' "% zx" 'hoặc' "% zo" 'cho hex hoặc bát phân). –

+0

Bạn nói đúng, độ dài chỉ có thể là số âm :) – dco

4

Nếu bạn muốn độ dài của mảng ký tự sử dụng sizeof(array)/sizeof(array[0]), nếu bạn muốn độ dài của th sử dụng chuỗi điện tử strlen(array).

+0

điều này chỉ hoạt động nếu tất cả các phần tử có cùng độ dài? –

6

Xin chào dù câu trả lời ở trên là OK, đây là đóng góp của tôi cho câu hỏi của bạn.

//returns the size of a character array using a pointer to the first element of the character array 
int size(char *ptr) 
{ 
    //variable used to access the subsequent array elements. 
    int offset = 0; 
    //variable that counts the number of elements in your array 
    int count = 0; 

    //While loop that tests whether the end of the array has been reached 
    while (*(ptr + offset) != '\0') 
    { 
     //increment the count variable 
     ++count; 
     //advance to the next element of the array 
     ++offset; 
    } 
    //return the size of the array 
    return count; 
} 

Trong chức năng chính, bạn gọi kích thước hàm bằng cách chuyển địa chỉ của phần tử đầu tiên trong mảng của bạn. Ví dụ:

char myArray[] = {'h', 'e', 'l', 'l', 'o'}; 
printf("The size of my character array is: %d\n", size(&myArray[0])); 

All the best

+1

Tại sao có một biến riêng biệt cho bù trừ khi bạn chỉ có thể sử dụng tính? Đây là một phiên bản ngắn hơn (nhưng khó hiểu hơn): 'int strlen (const char * pStr) { \t int i = 0; \t khi (* pStr) { \t \t ++ i; \t} \t trả lại i; } ' – DividedByZero

1

Ngoài ra còn có một hình thức nhỏ gọn cho rằng, nếu bạn không muốn dựa vào strlen. Giả sử rằng các mảng nhân vật bạn đang xem xét là "msg":

unsigned int len=0; 
    while(*(msg+len)) len++; 
0

sử dụng sizeof()

char h[] = "hello"; 
printf("%d\n",sizeof(h)-1); //Output = 5 

sử dụng string.h

#include <string.h> 

char h[] = "hello"; 
printf("%d\n",strlen(h)); //Output = 5 

sử dụng chức năng (strlenthực hiện)

int strsize(const char* str); 
int main(){ 
    char h[] = "hello"; 
    printf("%d\n",strsize(h)); //Output = 5 
    return 0; 
} 
int strsize(const char* str){ 
    return (*str) ? strsize(++str) + 1 : 0; 
} 
Các vấn đề liên quan