我写了一个简单的程序,它在一个空格后返回值:例如输入“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;
}