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

Copying a desired string from a text file in C

我已经读取了所需文件中的所有文本,它现在存储在 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() returns 是指向搜索字符串位置的指针,我添加了 7 以仅获取搜索字符串之后的文本,这部分工作正常.问题是 strcpy()buff 字符数组的其余部分复制到 graph1.title 中。 如何指示 strcpy() 只复制与 substring 指针在同一行的文本?也许使用 strtok()

一次读取并处理一行。

for( ; fgets(line,...); ) {
    do stuff on line
}

您可以使用另一个 strstr 来获取行尾的 位置 ,然后使用 strncpy 类似于 strcpy,但接受第三个参数要复制的字符数 输入。

我同意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)