我正在尝试读取文件,找到字符串“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);
}
答案 0 :(得分:1)
您可以在文件中找到sscanf
字符串时添加mypop
。在while循环中添加以下行:
sscanf(buf,"%*[^=]= %[^\n]",value);
"%*[^=]"
:这意味着scanf为=
加上所有字符并忽略它
" %[^\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++;
}