我写了一个简单的程序,它在一个空格后返回值:例如输入“alababa 4”返回4,在没有空格的情况下返回0。但现在我想扫描那根线,但它不起作用,我不知道我在哪里犯了错误。

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


int main(){

//char * string="alababa 4" - it worked that way
char * string;

scanf("%c", &string);
int dlugosc=strlen(string);

  for(int i=0;i<=dlugosc-1; i++)
  {

  char temp;
  temp=string[i];
  char str2[] = " ";
  if(temp==' ')
  {

      char * pZnak = strpbrk( string, str2 );
      printf( "%s \n", pZnak );
      return pZnak[1]-48;

  }

  }
  return 0;
}

第二个问题,为什么回报率比应该的高48?

最佳答案

您创建了一个指向char的指针,但没有为它分配内存。最简单的方法是创建一个固定大小的char数组。
scanf%c中,表示读取单个字符,若要读取字符串,请使用%s,但scanf()只读取空格符号,而不读取'\n'。当你输入“alababa 4”时,它将只显示alababa。您可以使用gets()fgets()来读取整个字符串。此外,变量string已经是一个指针,您不需要在那里使用&。正确的语法应该是:scanf("%s", string);但正如我所说,它将只读取第一个单词。
程序中的pZnak[0]包含“space”,而pZnak[1]包含“4”。“4”的ASCII代码是52。
这是一个程序,它从键盘读取字符串,并在屏幕上的空格符号后打印所有内容。

#include <stdio.h>  // for printf() and gets()
#include <string.h> // for strpbrk()

int main(void) {
    char string[80]; // It can contain a string of 79 symbols + '/0'
    char *checkStr = " ";
    gets(string);
    char *ptr = strpbrk(string, checkStr);
    printf("%s\n", ptr);
    return 0;
}

10-06 12:44
查看更多