我已阅读所需文件中的所有文字,现在存储在buff
中。我想在标识符字符串之后复制字符串内容,例如' Title'。
以下示例文件:
"Title: I$_D$-V$_{DS}$ Characteristic Curves (Device 1)
MDate: 2016-03-01
XLabel: Drain voltage V$_{DS}$
YLabel: Drain current I$_D$
CLabel: V$_{GS}$
XUnit: V
... "
for(;;) {
size_t n = fread(buff, 1 , DATAHOLD, inFile);
subString = strstr( buff, "Title");
if( subString != NULL) {
strcpy(graph1.title , (subString + 7));
subString = NULL;
}
....more if statements....
if( n < DATAHOLD) {
break;
}
}
我理解strstr()
返回指向搜索字符串位置的指针,我添加了7
以获取搜索字符串后面的文本,这部分工作正常。问题是strcpy()
将buff
字符数组的其余部分复制到graph1.title
。
如何指示strcpy()
仅复制与substring
指针位于同一行的文本?可能使用strtok()
?
答案 0 :(得分:2)
我同意ChuckCottrill,如果您一次阅读并处理一行,会更好。
此外,由于您正在处理的文件是文本文件,因此您可以在文本模式下打开它。
FILE *fin = fopen("filename", "r");
将fgets()
的一行读入字符串str
。请注意,fgets()
会将\n'
跟踪到str
。
fgets(str, sizeof(str), fin);
char *substring;
if( (substring = strstr(str, "Title: ")) != NULL )
{
strcpy(graph1.title, substring+strlen("Title: "));
}
此时,graph1.title
将包含I$_D$-V$_{DS}$ Characteristic Curves (Device 1)
。
答案 1 :(得分:1)
一次读取并处理一行。
for( ; fgets(line,...); ) {
do stuff on line
}
答案 2 :(得分:1)
您可以使用其他strstr
来获取行尾的位置,然后使用strncpy
strcpy
,但接受第三个参数,要复制的字符数的输入。