2012-11-25 33 views
11
#include <stdio.h> 

int main() 
{ 
    char *ptr = "stackoverflow" 

} 

指出一個字符串的大小有沒有辦法找到計算器ptr指向的長度,爲的sizeof PTR總是給人4查找指針

+0

'的sizeof 「計算器」'yelds正確'14'值。 – pmg

回答

10
  1. sizeof()返回該類型所需的大小。由於在這種情況下傳遞給sizeof的類型是一個指針,它將返回指針的大小。

    如果需要由指針指向的數據的大小,你將不得不storing it explicitly記住它。

  2. sizeof()作品在編譯時。所以,sizeof(ptr)通常會return 4 or 8 bytes。請使用strlen

30

使用strlen找到(號碼長度在)的字符串

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

另一個小點,字符注意ptr是一個字符串(一個指向常量存儲器不能被修改)。更好的做法是將其聲明爲const來展示這一點。

+1

+1'size_t' – iabdalkader

+1

+1兩種好做法,指定字符串字面量爲'爲const char *'和使用'size_t' – effeffe

+0

事實上 - 只是要小心,如果目標不是結束的字符串空,這將測量直到它或者在內存中隨機發現一個空值,或者在搜索過程中觸發內存保護錯誤。當然(正如其他人指出的那樣),返回的值不包括終止空值的大小。 –

1

您可以嘗試使用:

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

string.h提供的strlen()功能使用戶可以通過參數指出許多「真實人物」的字符串是如何包含。但是,該長度不包括終止空字符'\0';如果你需要分配內存的長度,你必須考慮它。

這4個字節是一個指針的大小爲char你的平臺上。

0

如果ptr長度是函數的參數,則將指針用作字符串是合理的。我們可以通過下面的代碼得到的字符串長度:

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

而對於更多的解釋,如果串是用可變長度用戶輸入的字符串,我們可以使用下面的代碼:

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); 
} 

要理解的簡單代碼

0

純粹使用指針可以使用指針算術:

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 */ 
}