#include <stdio.h>
int main()
{
char *ptr = "stackoverflow"
}
指出一個字符串的大小有沒有辦法找到計算器ptr指向的長度,爲的sizeof PTR總是給人4查找指針
#include <stdio.h>
int main()
{
char *ptr = "stackoverflow"
}
指出一個字符串的大小有沒有辦法找到計算器ptr指向的長度,爲的sizeof PTR總是給人4查找指針
sizeof()
返回該類型所需的大小。由於在這種情況下傳遞給sizeof的類型是一個指針,它將返回指針的大小。
如果需要由指針指向的數據的大小,你將不得不storing it explicitly記住它。
sizeof()
作品在編譯時。所以,sizeof(ptr)
通常會return 4 or 8 bytes
。請使用strlen
。
使用strlen找到(號碼長度在)的字符串
const char *ptr = "stackoverflow"
size_t length = strlen(ptr);
另一個小點,字符注意ptr
是一個字符串(一個指向常量存儲器不能被修改)。更好的做法是將其聲明爲const來展示這一點。
+1'size_t' – iabdalkader
+1兩種好做法,指定字符串字面量爲'爲const char *'和使用'size_t' – effeffe
事實上 - 只是要小心,如果目標不是結束的字符串空,這將測量直到它或者在內存中隨機發現一個空值,或者在搜索過程中觸發內存保護錯誤。當然(正如其他人指出的那樣),返回的值不包括終止空值的大小。 –
您正在尋找strlen()
功能。
您可以嘗試使用:
char *ptr = "stackoverflow"
size_t len = strlen(ptr);
由string.h
提供的strlen()
功能使用戶可以通過參數指出許多「真實人物」的字符串是如何包含。但是,該長度不包括終止空字符'\0'
;如果你需要分配內存的長度,你必須考慮它。
這4個字節是一個指針的大小爲char你的平臺上。
如果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);
#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);
}
要理解的簡單代碼
純粹使用指針可以使用指針算術:
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 */
}
'的sizeof 「計算器」'yelds正確'14'值。 – pmg