2016-09-24 66 views
1

我的程序假設要採用字符串並在一行中打印每一行。我正在尋找空間來決定何時將一個字打印到一個新行。我使用一個名爲hold的字符串來存儲每個字母,直到找到一個空格。那個單詞然後被打印到屏幕上。我遇到的問題是,如果最後一個詞處於保留狀態比前一個詞更長,那麼新詞將與最後一個詞的尾部一起打印。我似乎無法清除我用來暫時保存文本塊的字符串

示例:如果最後一個單詞是「Program」,並且下一個單詞是「cat」,則屏幕的輸出將是Program,然後是catgram。

下面

是我的代碼:

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


char *string; 
char *hold; 


int main(void) 
{ 
    string = malloc(200); 
hold = malloc(50); 
int i=0; 
int j=0; 

printf("please enter a string\n"); 
scanf("%[^\n]",string); 

while (string[i] !='\o') 
{ 
    if (string[i] !=' ') 
    { 
     hold[j] = string[i]; 
     j++; 
    } 
    else 
    { 
     printf("%s\n",hold); 
     j = 0; 
    } 
    i++; 
} 
return 0; 
free(string);  
} 
+1

恐怕你拼錯'\ 0'爲'\ O'。編輯:哦,你也永遠不會終止字符串'hold'。 –

+0

看到您的問題如何解決,您可以接受其中一個答案嗎? –

+0

發佈的代碼不會乾淨地編譯。它缺少以下語句:'#include ',以便在執行'return 0;'語句時正確地爲'free()'和'malloc()' – user3629249

回答

0

字符串爲「\ 0」結束不是「\ o」的

0

看到的是,printf()版畫系列中的所有字符,直到它看到一個空字節。你之前的單詞已經填滿了一些字節,並且由於你可以閱讀它們,顯然它們不是空的。

要修復您的代碼,您必須在hold[]數組中的單詞末尾添加空字節。

else 
{ 
    /* j now refers to the array-slot which should be NULL */ 
    hold[j] = '\0'; 

    printf("%s\n",hold); 
    j = 0; 
} 
+0

感謝您的幫助 – Brett

+0

不客氣。 –

1

請加上線

hold[j]='\0'; 

原因:該字符串的結尾是「\ 0」,如果你還沒有明確加入了「\ 0」,它會佔據整個字符串,直到找到第一個「\ 0」 和

printf("%s\n",hold); 

原因:要獲得最後一個字打印,如果詞串不與空間結束

如在下面的編輯程序

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
char *string; 
char *hold; 


int main(void) 
{ 
    string = malloc(200); 
    hold = malloc(50); 
    int i=0; 
    int j=0; 

    printf("please enter a string\n"); 
    scanf("%[^\n]",string); 
    printf("%s\n",string); 

    while (string[i] !='\0') 
    { 
     if (string[i] !=' ') 
     { 
      hold[j] = string[i]; 
      j++; 
     } 
     else 
     { 
     hold[j]='\0';   **//Edited here** 
     printf("%s\n",hold); 
     j = 0; 
     } 
    i++; 
} 
printf("%s\n",hold); **//Edited here** 
return 0; 
free(string);  
} 
+0

謝謝你的幫助。這是我在大學C程序設計的第一個學期。 – Brett

相關問題