2017-05-01 182 views
-7

我聲明一個空字符串:相同C代碼的行爲不同

char str[MAX_LEN] = "\0"; //empty String 

然後

void InitString(char *str,int maxlenght) 
{ 

    char input = 0; 
    int counter = 0,i; 
    for(i = 0;i<(maxlenght);i++) 
    { 
     *(str+i) = '\0'; 
    } 
    getchar(); 
    printf("\nEnter new string of max %d chars: ",maxlenght); 
    while (input != '\r' && counter < (maxlenght-1)) 
    { 
     input = getche(); 
     *(str+counter) = input; 
     counter++; 
    } 
} 

void PrintString(char *str) 
{ 

    int i = 0; 
    printf("\nThe String Created is : "); 
    puts(str); 
    while(*(str+i) != '\0') 
    { 
      printf("%c", *(str+i)); 
     i++; 
    } 
} 

我不知道爲什麼這樣的代碼具有不同因爲代碼是相同的邏輯到上一個。

int CountWords(char *str) 
{ 


    int i = 0; 
    char ch; 
    while(*(str+i) != '\0') 
    { 
      printf("%d", *(str+i)); 
     ch = *(str+i); 
     printf("%c",ch); 
     numNumber++; 
     i++; 
    } 
    return i; 
} 

即使測試條件相同,低位代碼塊也沒有輸出。

+1

我個人推薦使用str [i]!='\ 0'代替*(str + i)!='\ 0',因爲在我看來,當你對某些代碼有疑問時,它會更清晰地閱讀 – Archmede

+1

不起作用,發佈簡短,乾淨編譯的代碼,仍然存在問題。由於這是運行時問題,請發佈實際輸入,並在實際輸出後張貼預期輸出。 – user3629249

+0

函數:'getche()'是非標準C語言,爲什麼在getchar()可用時使用它?一般來說,檢查'\ n'是否在行尾(除非你有一些'特殊'的通信實際上通過了'\ r')。在第二個代碼中,snippit是什麼變量:'numNumber'?它有什麼如何解決這個問題?哦,順便說一句:這是什麼問題? – user3629249

回答

1

你的問題是你正在使用puts()This states

C庫函數int puts(const char * str)將一個字符串寫入stdout直到但不包括空字符。一個換行符被附加到輸出。

因此,如果puts()使用strlen()那麼你'\0''\n'取代,這就是爲什麼你的while循環不起作用。

+0

放置(str)那裏工作完善countnumner方法區域wint工作 –

+0

雖然循環彎曲罰款相信我它打印一個siic%d但wint打印%c .. –

相關問題