【问题标题】:reading characters from buffer从缓冲区读取字符
【发布时间】:2016-01-22 21:05:14
【问题描述】:

我正在扫描字符串作为输入,我正在使用 getline 来执行此操作,例如

char *lajna=NULL;
size_t dlzka=0;
getline(&lajna,&dlzka,stdin);

我想使用 fgetc 读取第一个字符,我尝试这样做

test=fgetc(lajna);

但它会引发错误

无法将“char**”转换为“FILE* {aka _IO_FILE*}”,以将参数“1”转换为 'int fgetc(文件*)' ciarka=fgetc(&lajna);

我查了一下,没有发现如何像这样从缓冲区中读取字符,正确的方法是什么?

【问题讨论】:

  • char *sp = lajna; test=*sp++;

标签: c fgetc getc


【解决方案1】:

fgetc()的原型:

   int fgetc(FILE *stream);

它需要FILE* 作为参数,但您传递的是char*。因此,错误。 (错误消息表明您实际上拥有它:test=fgetc(&lajna);

要从lajna 读取字符,您不需要使用任何函数或特殊机制。您可以简单地对其进行索引:

char ch = lajna[0]; // first char 

等等。

或者您可以使用循环来读取所有字符。

for(i=0; lajna[i]; i++) {  //until the null terminator '\0'
   char ch = lajna[i];
}

【讨论】:

  • 我想在那个缓冲区上使用 sscanf,我需要去掉第一个字符。
  • 不确定为什么需要使用sscanf()。如果您只是忽略第一个字符然后执行:char *str = lajna +1; 并使用str。如果您想制作副本,请使用:char buf[dlzka]; strcpy(buf, lajna+1);
  • 如果你想使用sscanf 并忽略第一个字符,一个选项是:sscanf(&lajna[1], ...)。这假设 lajna 至少有一个字符(和 NUL 终止符)。或sscanf(lajna, "%*c%s", ..)* 格式说明符表示解析但忽略该输入。
  • 这对我的代码毫无帮助,有什么方法可以在该缓冲区上使用 fgetc 吗? "%*c" 把它搞砸了。
  • "有什么方法可以在那个缓冲区上使用 fgetc 吗?" - 不。这是不可能。你在问一些没有意义的事情。 fgetc() 中读取,而不是从缓冲区中读取。 sscanf() 可用于读取字符,但这对缓冲区中的单个字符毫无意义。
猜你喜欢
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
相关资源
最近更新 更多