關於這個代碼,我想知道的大小不是長度:從sizeof(str)中得到的大小是多少?
char* str= "the big fox hid the carrot."
int *i=(int*) (sizeof(str));
我會得到什麼i
?
關於這個代碼,我想知道的大小不是長度:從sizeof(str)中得到的大小是多少?
char* str= "the big fox hid the carrot."
int *i=(int*) (sizeof(str));
我會得到什麼i
?
我會在
i
中獲得什麼?
沒有保證,它是實現定義的行爲將整數類型轉換爲指針。
爲了闡述,在你的代碼,
char* str= "the big fox hid the carrot."
str
是char *
。 sizeof(str)
與sizeof(char*)
相同,即sizeof(<a pointer>)
,通常爲4
或8
,具體取決於您的平臺。
記住,sizeof
計算爲size_t
類型的結果,所以你應該
size_t
的變量來保存結果%zu
格式說明符來打印結果。的要實現可能看起來像
#include <stdio.h>
int main(void) {
char * ptr = "Hello!!";
size_t size = sizeof(ptr);
printf("size if %zu\n", size);
return 0;
}
從問題
的答案的原始版本保留的說什麼一個working version,只是添加更多的上下文,申請sizeof
str
不會給你的大小它指向的字符串文字。您可以使用strlen()
來獲取它指向的字符串的長度。
我只是想知道sizeof不是長度... 答案應該是像4但我不明白它 –
@MikeCAT你的意思是4字節? –
@ThanShani你爲什麼將'sizeof'返回的數字轉換爲指針? – melpomene
指針str
的大小能夠得到任一像
size_t n = sizeof(char *);
或
size_t n = sizeof(str);
或
size_t n = sizeof str;
根據所使用的環境中的結果可以等於4或8。
如果你想知道文字指向海峽,那麼你需要申請在頭部聲明標準C函數strlen
<string.h>
#include <string.h>
//...
size_t n = strlen(str);
字符串文本的長度將等於27字符串的長度
考慮到sizeof
運算符和標準C函數strlen
返回size_t
類型的標量積分值。
這裏是一個示範項目
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str = "the big fox hid the carrot.";
printf("sizeof(*str) = %zu\nsizeof(str) = %zu\nstrlen(str) = %zu\n",
sizeof(*str), sizeof(str), strlen(str));
}
它的輸出可能看起來像
sizeof(*str) = 1
sizeof(str) = 4
strlen(str) = 27
謝謝,我只是想知道sizeof(str)= 4。你是怎麼到4的? 4是什麼意思? –
@ThanShani通過運行程序並查看輸出來獲得4。4代表'char *'的大小是4個字節。 – melpomene
@melpomene謝謝。如果改爲char *,那只是char,sizeof(str)仍然是4? –
'sizeof(char *)'和如何將非零整數轉換爲指針都是實現定義的。運行代碼以獲得答案。 – MikeCAT
'int * i =(int *)(sizeof(str));'??你在做什麼呢? –
該代碼實際上會發出編譯錯誤,因爲字符串文字之後出現分號。 – MikeCAT