2016-09-24 64 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

相关问题