C程序在程序结束时返回随机字符? (最后的功能)

时间:2018-01-27 16:16:31

标签: c arrays string pointers

这段代码只是我乱用指针并看到它们的使用,因为我是初学者。虽然我在代码结束时遇到了问题。它应该在一个新行上显示每个单词但是在最后一个单词之后它只显示一组随机字符。

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

void printWord(char *start); 
char *nextWord(char *start); 


 void main() 
 {
     int i = 0;
     char location[200] = "7825 CREEK VALLEY SACRAMENTO 95828 CA";
     char *ptr;
     ...

First Function打印前3个单词

// 3. instead of printing characters (using putchar) until a '\0', printWord 
//    prints characters until a space ' '
puts("First Word");
printWord(location);

puts("Second Word");
printWord(location+5);

puts("Third Word");
printWord(location+11);
puts("");

第二个功能是导致我出现问题的功能,评论尽可能地解释了它。

    ...
    // starting from the first character in the input string, each call to 
    // "nextWord" should return the next word in the string
    // e.g. if the input string is "Hi there everyone" :
    // first call to nextWord should return the address of the letter 't' of 
    //  "there"
    // second call to nextWord should return the address of the first letter 
    // 'e'of "everyone"
    // third call to nextWord should return NULL

    ptr = location;
    while(ptr)
    {
        // instead of printing characters (using putchar) until a '\0', 
        // printWord prints characters until a space ' '
        printWord(ptr);
        printf("\n");
        ptr = nextWord(ptr);
    }


}

此功能可以正常工作

void printWord(char *start)
{
    for(; *start != ' '; start++){
        putchar(*start);
    } 
    putchar('\n');
}

但是这个问题让我有问题......

char *nextWord(char *start)
{
    int i=0;
    for(; *start != '\n'; start++){
        if(*start == ' '){return(start+1);}
        else if(*start == '\0'){return NULL; }

    }
}

2 个答案:

答案 0 :(得分:1)

只需编辑printWord()函数,如下所示:

void printWord(char *start)
{
    for (; *start != ' '; start++) {
        if (*start == '\0') { break; }
        putchar(*start);
    }
    putchar('\n');
}

你没有处理行尾案例

答案 1 :(得分:0)

在您的代码中:

char *nextWord(char *start)
{
    int i=0;
    for(; *start != '\n'; start++){
        if(*start == ' '){return(start+1);}
        else if(*start == '\0'){return NULL; }

    }
}

你的测试条件是错误的。您的单词由原始字符串中的空格分隔。尝试:

char *nextWord(char *start)
{
    tmp = start;
    while( (*tmp != ' ') && (*tmp != '\0')) {
       tmp++;
    }
    return (*tmp == '\0' ? NULL : tmp+1);
}

此外,在您的示例中,您正在修改参数中的指针start,这在返回指针值时没有用。