2013-01-05 27 views
0

我有一個非常簡單的函數,它只是將char轉換爲一個char *,它表示char和char的二進制值,字符爲0和1。strlen(char *)的分割錯誤,但char * IS終止

char* stringToBin(char symbol) { 
    int pos = 0; 
    int value = (int) symbol; 
    int rest; 

    char* result = (char*) malloc(sizeof(char) * 9); 

    while(value > 0) { 
      if(value % 2 == 0) { 
        result[7-pos] = '0'; 
      } 
      else { 
        result[7-pos] = '1'; 
      } 
      pos++; 
      value = value/2; 
    } 

    while(pos < 8) { 
      result[7-pos] = '0'; 
      pos++; 
    } 

    result[8] = '\0'; 

    puts(result); 
    puts(strlen(result)); 

    return result; 
} 

我的問題是我無法打印char *的長度。打印整個字符*完美,但不計算大小。我總是得到分段錯誤。我認爲這個問題很簡單,但我現在沒有明白。所以請給我缺少的提示;)

+0

請構建一個完整的[SSCCE測試用例](http://sscce.org),包括導致問題的輸入。 –

+3

標準提示:可以編譯所有警告和調試信息(例如Linux上的gcc -Wall -g)並使用調試器(例如gdb) –

+0

值也許是負值? –

回答

11

這個問題是不與你的字符串的NUL終止,這很好。相反,

puts(strlen(result)); 

是錯誤的。 puts()需要一個C字符串,並且您要給它一個size_t。寫來代替:

printf("%zu\n", strlen(result)); 

(這裏假定爲size_t C99的格式說明%zu可如果沒有,則使用:

printf("%u\n", (unsigned)strlen(result)); 

代替。)