【问题标题】:Indexing in fread(): Is there a way to set the minimum index to be returned?fread() 中的索引:有没有办法设置要返回的最小索引?
【发布时间】:2014-10-10 19:29:26
【问题描述】:

上下文:

我正在尝试读取一个文件,并找出我正在阅读的部分中的哪个字符。对于这部分程序的总体方案,我使用的是 pthreads 和 fread()。

现在,我的代码如下所示:

  excess=( fread( thread_data[i].buffer, 1, 30, f ) );
  printf("\n\nSegFault 1 \n\n%s\n\n\n", thread_data[i].buffer);
  printf("\n\nSegFault 2 n\n%s\n\n\n", &thread_data[i].buffer[10]);

为了将所有内容放在上下文中,第一条语句是打印整个缓冲区,包括剩余的垃圾,我还没有设置空终止符。

然后,我们调用第二个 printf,我将获取从缓冲区中的第 10 个字符到缓冲区的最后一个字符的所有内容。例如:

 frist printf:    1234567890 abcdefgh
 second printf:   abcdefgh

问题:

如何索引缓冲区以便我可以检索单个字符来玩?如果我们看上面的例子,当我调用时:

&thread_data[i].buffer[10]

我期待返回' ',也就是一个空格

【问题讨论】:

  • 这与fread()无关。或者使用 pthreads。

标签: c indexing pthreads fread


【解决方案1】:

您的索引基本正确,但打印错误。您可以像这样引用缓冲区中索引 10 处的 char

thread_data[i].buffer[10]

如果您取而代之的是 char 的地址,则生成的 char * 可用于引用由从索引 10 开始的 thread_data[i].buffer 的尾部组成的 C 字符串。所以试试这个:

printf("\n\nSegFault 2 n\n%c\n\n\n", thread_data[i].buffer[10]);

注意两者对格式字符串和参数的细微更改。

【讨论】:

  • 所以我正在查看它,这正是我所期望的。但是,我现在坚持将此字符存储在结构中的前提(这就是我首先尝试打印它的原因)。无论如何,感谢您的帮助!
  • 您可以将单个字符存储在char 类型的结构成员中。对于某些n,您还可以将字符数组存储在char[n] 类型的结构成员中。如果您比 C 更熟悉高级语言,那么可能是 C 缺少字符串类型而让您失望。 char 只代表一个字符,而 C 中的“字符串”本身并不是真正的类型,只是建立在 char 类型之上的一种标准化约定。
  • 谢谢,约翰。非常感谢您的帮助!
猜你喜欢
  • 2021-12-09
  • 2022-12-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 2016-08-26
相关资源
最近更新 更多