我在字符串 s1 中搜索了两个用于搜索字符串 s2 的代码,如果在 s1 中找到了 s2 然后打印找到匹配位置的地址,并且应从匹配位置打印 s1 到 s1 的最后一个字符。如果 s1 =“上帝很棒”且 s2 =“是”,则应打印匹配地址以及“很棒”。< / p>
CODE 1:
#include<stdio.h>
#include<string.h>
void main()
{
char s1[80]="god is great",s2[10]="is";
char *searchptr;
searchptr=strstr(s1,s2);
printf("%p\n%p\n",searchptr,s1);
sprintf(s1,"%s",searchptr);
puts(s1);
}
CODE 2:
#include<stdio.h>
#include<string.h>
void main()
{
char s1[80],s2[10];
char *aptr;
printf("%s\n%s\n","enter a line","enter string to be searched");
fgets(s1,80,stdin);
printf("\n");
fgets(s2,10,stdin);
aptr=strstr(s1,s2);
printf("%p\n,aptr);
sprintf(s1,"%s",aptr);
puts(s1);
}
在第一个代码中,我已经初始化了字符串及其工作,但第二个代码给出了非常意外的结果。它给出了每种情况下的匹配地址(正如我已经尝试过的) aptr = 0000000 。使用 fgets 时有什么问题,因为在第二个代码中我想要输入从键盘?
答案 0 :(得分:5)
fgets
也会在读缓冲区中存储'\n'
- 新行(按下输入键时输入)。因此,您的搜索字符s2
变为"is\n"
s1
至aptr
中不存在NULL
并且正在打印。
您需要从'\n'
修剪s2
,您可以通过
fgets(s2,10,stdin);
if(s2[strlen(s2)-1] == '\n')
s2[strlen(s2)-1] = '\0';
另外,请在打印前检查aptr
而不是NULL
。