从C中的文本文件复制所需的字符串

时间:2017-08-12 05:13:14

标签: c string text strstr

我已阅读所需文件中的所有文字,现在存储在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()

3 个答案:

答案 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,但接受第三个​​参数要复制的字符数的输入。