如何在C中从文本文件中查找和提取特定单词?

如何在C中从文本文件中查找和提取特定单词?,c,function,C,Function,这个函数很大,但我从这个函数中提取了一些代码,我有一个问题,如何从文本文件中找到特定的名称?我不确定 for (option = 1; option <= sizeof(listing)/sizeof(char *); ++option) printf("%d. Your %s:\n", option, listing[option-1]); fputs("Select your choice to update: ", stdout); if ((scanf("%d", &a

这个函数很大,但我从这个函数中提取了一些代码,我有一个问题,如何从文本文件中找到特定的名称?我不确定

for (option = 1; option <= sizeof(listing)/sizeof(char *); ++option)
   printf("%d. Your %s:\n", option, listing[option-1]); 

fputs("Select your choice to update: ", stdout);

if ((scanf("%d", &option) != 1) || (option < 1) || (option > sizeof(listing)/sizeof(char *))) 
{
  puts("invalid choice");
  fclose(fr3);
  return -1;
}

int one_by_one;
printf("Enter new name to update: ");
scanf("%s",&updated_name);

for (one_by_one=0; file_text[one_by_one] != '\0'; one_by_one++)
{
    while(file_text[one_by_one] == updated_name)
    {
        one_by_one++;
        if (one_by_one == strlen(updated_name))
        {
            found=1;
            printf("It is found: \n");
            break;
        }
    }
}

如果您试图搜索和更新任何名称,您应该使用fgets从源文件中获取一行并存储在临时字符数组中。然后,您可以使用字符串函数(如strstrstr函数)在该行中查找名称,如果找到,则替换它,否则继续

您可以参考此部分以获得帮助。

关于:

scanf("%s",&updated_name);
while(file_text[one_by_one] == updated_name)
这将允许用户溢出缓冲区:更新的\u名称。建议包含比更新的_name[]的长度小1的最大字符修饰符,因为%s总是在输入后附加NUL字节。这将避免缓冲区溢出和由此产生的未定义行为

关于:

scanf("%s",&updated_name);
while(file_text[one_by_one] == updated_name)
字符串不能与C运算符进行比较。建议使用strcmp。此外,这是将字符串与单个字符进行比较,这是行不通的

要在字符串中查找子字符串,强烈建议使用:strstr