为什么我的输出为空?

时间:2016-10-22 23:09:07

标签: c string 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);
        printf("string after %c is %s ", ch, findM);

    return 0;
}

程序的输入是"My name is Steve",并且该程序的输出变为,M之后的字符串(null)为什么会发生这种情况?

4 个答案:

答案 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;

了解更多详情:http://www.cplusplus.com/reference/cstring/strchr/

答案 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;
}