getline 函数扫描整个输入行并将其存储在给定的char数组中。假设我想使用 getline 方法从给定索引开始扫描输入。我怎样才能做到这一点?
例如,假设输入为:您好,我的名字是John。
我希望getline只存储我的名字是John。
char* cmd = NULL;
size_t size = 0;
getline(&cmd, &size, stdin); // code to get whole input line.
谢谢
答案 0 :(得分:1)
使用fgets功能可以将整行作为输入。之后根据位置 你需要的,你可以得到它。
例如,
char arr1[20],arr[]="hi this is for testing";
strcpy(arr1,arr+10); // In this you can use the cmd for that.
您将获得所需的字符串。
答案 1 :(得分:1)
getline
没有这样的能力。但是,它从默认输入流中读取,并且还有许多其他函数也从该流中读取。
最基本的阅读功能之一是getc()
。它读取一个单个字符。所以,要#34; make" getline从第N个字符开始读取,在它之前使用N次getc
。
// "skip" N characters - read N and forget them immediatelly
for(int i=0;i<N;++i)
getc(); // remember: that's a READ, it can FAIL
getline( ... ); // remember: that's a READ, it can FAIL
当然,这样,所有那些跳过的角色现在都是不可恢复的(好吧,差不多,但让我们跳过它)。此外,此方法不允许您向后移动&#34;。你只能跳过&#34;前进&#34;。
如果您需要回顾输入流中的任何字符,则需要某种缓冲。将全部或部分输入读入缓冲区,查看整个缓冲区(数据数组等),从缓冲区中删除有趣的部分,将新的/下一个数据加载到缓冲区中,依此类推。缓冲区很好! :)
但是,这个逐个阅读也有时候也可以。这种方式的主要优点是跳过&#34;是它根本不使用任何额外的内存。如果要跳过的数据很大,就像几公斤/兆/ /字节一样,那么将它全部打包到缓冲区中只是为了立即抛出它真的很浪费。
答案 2 :(得分:1)
答案是否定的。
您无法根据索引使用getline()
进行阅读。您只需要传递缓冲区指针的地址和大小变量的地址。读取行后,您可以解析缓冲区并根据索引获取所需内容。
答案 3 :(得分:1)
您可以使用fscanf
通过指定大小和星号来忽略固定数量的字符,如下所示:
fgets(cin, "%*6[^\n]"); // Ignore the first six characters, or up to \n
getline(&cmd, &size, stdin); // Read the rest of your string
格式字符串中的星号表示“读取和忽略”。 Six指定要读取(和忽略)的字符数。