2017-06-21 63 views
-1

所以我一直在編寫一個程序,它將一個十進制數轉換爲它的布爾表示,但是每次我編譯返回值是一個字符串顯示額外的像p┐這裏的字符是程序如何在c中打印一個沒有p┐的字符串

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

void main (void) 
{ 
    signed char str[256]; 
    int dec,rest; 
    int i = -1; 
    int j; 
    printf ("write a decimal number : "); 
    scanf ("%d",&dec); 
    do 
    { 
     rest = dec % 2; 
     dec/= 2; 
     for (j=i;j>-1;--j) 
      str[j+1]=str[j]; 
     str[0]=rest+48; 
     ++i; 
    } while (dec!=0); 
    printf ("the binary representation of this number is %s",str); 
} 

輸出:

write a decimal number : 156 
the binary representation of this number is 10011100p┐ 

我不知道我在想念的東西,但我會很感激,如果你們幫我

+0

你確定你正在創建一個有效的C字符串嗎? –

+2

字符串在C中以NULL結尾。 – LethalProgrammer

+0

索引問題或字符串不是NULL終止。 – Gaurav

回答

1

do {} while()循環結束時,需要將字符串中最後一個字符後面的字符設置爲0。這是你想要的最後一個字符的數組索引(i)加上一個。這讓printf知道你的字符串結束。 (否則,它怎麼會知道?)

2

在C和C++中,字符串是空終止的,這意味着每個有效的字符串必須以代碼爲0的字符結尾。該字符告訴每個正在處理該字符串的函數事實上已經結束了。

在你的程序中,你創建一個字符串,signed char str[256];它最初是隨機數據填充;這意味着你預留了256個字符的空間,它們都是垃圾,但系統不知道它們是無效的。嘗試打印這個字符串,看看會發生什麼。

爲了真正告訴系統你的字符串後說,8個字符結束,第9個字符HAST是NULL字符,或者乾脆0在你的代碼可以通過兩種方式做到這一點:

  • 在循環後,分配str[i] = 0,或(更簡單)
  • 初始化字符串作爲signed char str[256]={0};,whiche創建和存儲用空值填充它;在寫入字符串後,你可以確定你寫的最後一個字符後面的字符是NUL。
0

初始化str變量爲NUL

void main (void) 
{ 
    signed char str[256]; 
    int dec,rest; 
    int i = -1; 
    int j; 

    memset(str, '\0', sizeof(str)); 

    printf ("write a decimal number : "); 
    scanf ("%d",&dec); 
    do 
    { 
     rest = dec % 2; 
     dec/= 2; 
     for (j=i;j>-1;--j) 
      str[j+1]=str[j]; 
     str[0]=rest+48; 
     ++i; 
    } while (dec!=0); 
    printf ("the binary representation of this number is %s",str); 
} 
+0

是的,它是不一樣的。謝謝託比。 – skr