我正在敲打这个在比赛期间发生的问题: 我需要从给定的单词中找到最后三个字符。
'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;
}
感谢您的关注!