标准库'strchr'函数返回值

时间:2017-11-27 21:47:07

标签: c string standard-library

我正在敲打这个在比赛期间发生的问题: 我需要从给定的单词中找到最后三个字符。

'findLeast'函数是通过std库函数strchr通过查找作为第一个参数传递的字符串中的'\ 0'字符来实现的:作为第一个参数的字符串,它应该具有'\ 0'终止字符,其引用分配给作为第二个参数传递的字符串。然后递减该字符串以指向最后三个字符。

跳过isRime函数,它只查找两个字符串中找到的最后一个字符是否相等,问题在于:当第一次出现'findLeast'函数执行时,有效地找到最后三个字符,但是当再次调用'findLeast'时,它似乎只返回'\ 0'或NULL默认指针。怎么可能呢?

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

int isRime(char *firstLine, char *secondLine);

int main(){

    char *line = "Programming";
    char *line2 = "Learning";

    puts(line);

    printf("NUL character (the least): %s,last three characters: %s\n", strchr(line, '\0'), strchr(line, '\0') - 3);

    printf("%d\n", isRime(line, line2));

    return 0;
}

int isRime(char *firstLine, char *secondLine){

    #define RIME_SIZE 3

    void findLeast(const char *line, char *lastThree);

    char *buffer1;   
    char *buffer2;

    findLeast(firstLine, buffer1);
    puts(buffer1);
    findLeast(secondLine, buffer2);
    //buffer2 = (strchr(secondLine, '\0')) - 3; /*another way to achieve this*/
    puts(buffer2);

    if(!strcmp(buffer1, buffer2)){

        return 1;
    }

    return 0;
}

void findLeast(const char *line, char *lastThree){

    lastThree = strchr(line, '\0');

    lastThree -= 3;

    /*puts(lastThree);*/

    return;
}

感谢您的关注!

0 个答案:

没有答案