0

我正在尝试读取文件,找到字符串“myprop”,在“myprop”之后将是一个“=”符号,然后是一个数字。我需要将那个数字打印为字符串,去掉空格和注释。我能够找到“myprop”字符串,然后我相信我应该使用 fscanf,但我遇到了麻烦。

const char *get_filename_property()
{
    const char *filename  = "myfile.properties";
    const char *propkey = "myprop";
    char buffer[100], *buffPtr, lastChar, value[50];
    int line_num=1, i=0;

    FILE *fp;
    fp=fopen("myfile.properties", "r");
    if (fp == NULL)
        perror("Error opening file\n\n");

    while(fgets(buffer, 100, fp) != NULL)
    {
        if((strstr(buffer, propkey)) != NULL)
        {
            printf("Myprop found on line: %d\n", line_num);
            printf("\n%s\n", buffer);
        }
        line_num++;
    }
    if (fp)
        fclose(fp);
}  

int main(int argc, char *argv[])
{
    get_filename_property();
    system("pause");
    return(0);
}    
4

1 回答 1

1

您可以sscanf在文件中找到mypop字符串时添加。在您的 while 循环中添加以下行:

sscanf(buf,"%*[^=]= %[^\n]",value);

"%*[^=]":这意味着 scanf 将所有字符捕获在 the 之前=并忽略它

" %[^\n]":这意味着您将=在缓冲区字符串的结尾(甚至是空格字符)之后加上所有字符。只有值字符串开头的空格字符不会被加盖

以这种方式添加

while(fgets(buffer, 100, fp) != NULL)
 {
  if((strstr(buffer, propkey)) != NULL)
  {
   printf("Myprop found on line: %d\n", line_num);
   printf("\n%s\n", buffer);
   sscanf(buf,"%*[^=]= %[^\n]",value);
   printf("\nvalue is %s\n", value);
   break;
  }
  line_num++;
 }
于 2013-01-16T16:25:00.340 回答