#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(){
char str [1000] = "";
char ch = 'M';
char *findM;
printf("Enter a line of text\n");
scanf("%s", str);
findM = strchr(str, ch);
printf("string after %c is %s ", ch, findM);
return 0;
}
程序的输入是"My name is Steve"
,并且该程序的输出变为,M之后的字符串(null)为什么会发生这种情况?
答案 0 :(得分:1)
正如其中一条评论中所述,scanf("%s", str)
会一直读到,直到找到一个尾随的空格。在你的输入中&#34;我的名字是Steve&#34;由于scanf
之后有空格,My
将读取My
。
假设您的输入只包含数字,字母和空格,您可以尝试以下方法:
int main()
{
char str[1000] = "";
char ch = 'M';
char *findM;
printf("Enter a line of text\n");
scanf("%999[0-9a-zA-Z ]", str); // Get all alphanumerics and spaces until \n is found
findM = strchr(str, ch);
findM++; // Increment the pointer to point to the next char after M
printf("string after %c is %s ", ch, findM);
return 0;
}
如果您不需要使用
scanf()
,我建议您远离scanf()
并使用fgets()
代替:
int main()
{
char str[1000] = "";
char ch = 'M';
char *findM;
printf("Enter a line of text\n");
fgets(str, sizeof(str), stdin); // Get the whole string
findM = strchr(str, ch);
findM++; // Increase the counter to move to the next char after M
printf("string after %c is %s ", ch, findM);
return 0;
}
答案 1 :(得分:0)
如果方法找不到任何匹配项,您将获得null,您的输入可能没有&#39; M&#39;
答案 2 :(得分:0)
你的str变量可能不包含char&#39; M&#39;在第一个单词中 - 如果没有找到匹配,则strchr(string,char)函数返回null,并在第一个空格(不包括前导空格)之后切断输入字符串。正如在评论中提到的user3121023,使用fgets代替捕获多字输入。
答案 3 :(得分:0)
strchr()
正在考虑''(空格)作为分隔符,所以给你输入一个空间,它工作得很好..
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
char str [1000] = "";
char ch = 'M';
char *findM;
printf("Enter a line of text\n");
scanf("%s", str);
findM = strchr(str, ch);
if(findM)
printf("string after %c is %s ", ch, findM);
else
printf("Character not found ...\n");
return 0;
}