C fread()中的索引:是否有方法设置要返回的最小索引? 背景:

C fread()中的索引:是否有方法设置要返回的最小索引? 背景:,c,indexing,pthreads,fread,C,Indexing,Pthreads,Fread,我正在尝试读取一个文件,并找出我正在阅读的部分中的哪个字符。对于程序这一部分的总体方案,我使用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_dat

我正在尝试读取一个文件,并找出我正在阅读的部分中的哪个字符。对于程序这一部分的总体方案,我使用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]

我希望返回
'
,即一个空格您的索引基本正确,但打印错误。您可以引用缓冲区中索引10处的
字符,如下所示:

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

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

请注意格式字符串和参数的微小更改。

这与
fread()
无关。或者使用pthreads。所以我在看它,这就是我所期望的。然而,我现在的前提是将这个字符存储在一个结构中(这就是为什么我首先要打印它)。无论如何,谢谢你的帮助!您可以将单个字符存储在
char
类型的结构成员中。对于某些
n
,还可以将字符数组存储在
char[n]
类型的结构成员中。如果您比C更熟悉高级语言,那么可能是C缺少字符串类型让您感到困惑
char
只代表一个字符,而C“strings”本身并不是一个真正的类型,只是在
char
类型之上建立的一个标准约定。谢谢,John。我真的很感谢你的帮助!