2016-07-09 22 views
-5

關於這個代碼,我想知道的大小不是長度:從sizeof(str)中得到的大小是多少?

char* str= "the big fox hid the carrot." 
int *i=(int*) (sizeof(str)); 

我會得到什麼i

+2

'sizeof(char *)'和如何將非零整數轉換爲指針都是實現定義的。運行代碼以獲得答案。 – MikeCAT

+1

'int * i =(int *)(sizeof(str));'??你在做什麼呢? –

+0

該代碼實際上會發出編譯錯誤,因爲字符串文字之後出現分號。 – MikeCAT

回答

2

我會在i中獲得什麼?

沒有保證,它是實現定義的行爲將整數類型轉換爲指針。

爲了闡述,在你的代碼,

char* str= "the big fox hid the carrot." 

strchar *sizeof(str)sizeof(char*)相同,即sizeof(<a pointer>),通常爲48,具體取決於您的平臺。

記住,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,只是添加更多的上下文,申請sizeofstr不會給你的大小它指向的字符串文字。您可以使用strlen()來獲取它指向的字符串的長度。

+1

我只是想知道sizeof不是長度... 答案應該是像4但我不明白它 –

+0

@MikeCAT你的意思是4字節? –

+0

@ThanShani你爲什麼將'sizeof'返回的數字轉換爲指針? – melpomene

1

指針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 
+0

謝謝,我只是想知道sizeof(str)= 4。你是怎麼到4的? 4是什麼意思? –

+0

@ThanShani通過運行程序並查看輸出來獲得4。4代表'char *'的大小是4個字節。 – melpomene

+0

@melpomene謝謝。如果改爲char *,那只是char,sizeof(str)仍然是4? –

0

要獲得str大小,使用sizeof str

+0

簡答。任何方式直接到點。 – Michi