2016-01-24 39 views
0

所以我想做一個字符串在C二進制方法這是我到目前爲止的代碼:字符數組二進制數組不工作

int main(int argc, char **argv) { 
    convertStringToBits("hello"); 
} 

char *convertStringToBits(char **string) { 
    int i; 
    int stringLength = strlen(string); 
    int mask = 0x80; /* 10000000 */ 
    char charArray[stringLength * 8]; //* 8 for char bits? 

    for(i = 0; i < (sizeof(string)/sizeof(char)) + 1; i++) { 
     mask = 0x80; 
     char c = string[i]; 
     while(mask > 0) { 
      printf("%d", (c & mask) > 0); 
      mask >>= 1; /* move the bit down */ 
      //add to char array 
     } 
     printf("\n"); 
    } 

    return charArray; 
} 

的預期輸出:hello應該是:

01101000 
01100101 
01101100 
01101100 
01101111 

,但我得到這樣的:

01101000 
01101111 
01100011 
00100000 
01011011 

我也想返回字符數組,但我似乎無法做到這一點。

感謝您的幫助!

+2

'的sizeof(char)的'始終爲1 –

+0

@iharob並非所有系統上,我不認爲(如Raspbian) – madcrazydrumma

+2

這是強制性的按標準。它必須是1.是否CHAR_BITS是8,這是別的,但sizeof(char)必須是1. –

回答

3

Oopsie:

char **string 

你想傳遞一個字符串,這是一個char *。而是將指針傳遞給指針。

int stringLength = (sizeof(string)/sizeof(char)) + 1; 

似乎是偶然來的工作,因爲sizeof(string)回報率4(指針的大小)平臺上,和「你好」是5個字符。你想

int stringLength = strlen(string); 

這也將無法正常工作:

char charArray[stringLength * 8]; //* 8 for char bits? 

因爲只有它的記憶 「住」 裏面的功能。外界通過它,你需要使用malloc()來分配它:

char *charArray; 
charArray = malloc(8*stringLength+1); 
// Check that malloc returned a valid pointer. It's almost certain 
// that it will, but the one time it might return NULL... 
if (charArray == NULL) { 
    // ...you want to know it. Using charArray now would crash. 
    printf("An error occurred\n"); 

    // Either return something harmless or something that will 
    // show to the upstream code that an error occurred. 
    return NULL; 
} 
+0

糟糕的'NULL == charArray'我甚至不能看它。那你爲什麼不用'CHAR_BITS'呢?另外,請仔細閱讀代碼。 –

+2

@iharob - 這並不可怕 - 這是約達會議。 –

+0

@EdHeal我知道,我非常討厭它。我很難理解。我知道它可以防止意外的分配,但讀起來不太自然。 –

4

你對stringLength的計算是錯誤的,sizeof是一個運算符,它給你一個類型的大小,具有數組類型的對象當然會返回數組的大小。但你的string變量不是一個數組,它是一個指針,並且poitner的大小不是它指向的內容的長度。

而且,我懷疑你是在做別的事情錯了,因爲這

char c = string[i]; 

是錯誤的string[i]類型是char *char

您沒有發佈所有代碼,但這些代碼中有2個錯誤。不清楚爲什麼如果您不想更改參數,您將char **傳遞給函數。

+0

它給了我字符串中的字符數量,所以它肯定是有效的。 – madcrazydrumma

+0

這是錯的。除非你有證據證明他們錯了,否則不要與更有經驗的程序員相矛盾。如果這是正確的,爲什麼要添加'1'?和字符串的長度是多少?你可以改變它嗎? –

+0

那麼我該如何正確計算stringLength呢? – madcrazydrumma