c - 循环直到找到特定字符串

标签 c arrays string

我有一个简单的问题。我想用 C 编写一个程序来扫描特定文件的行,如果该行中唯一的短语是“Atoms”,我希望它停止扫描并报告它在哪一行。这是我所拥有但未编译的,因为显然我正在将整数与指针进行比较:(当然包括“string.h”。

char dm;
  int test; 
  test = fscanf(inp,"%s", &dm);

  while (test != EOF) {
    if (dm=="Amit") {
      printf("Found \"Atoms\" on line %d", j);
      break;
    }
    j++;
  }

文件已经被打开:

inp = fopen( .. )

并检查以确保其正确打开...

虽然我想使用不同的方法,但我想知道它是否可行。我可以这样扫描整行,而不是扫描单个字符串:

// char tt[200];
//
// fgets(tt, 200, inp);

然后做类似的事情:

if (tt[] == "Atoms") 中断;

谢谢! 阿米特

最佳答案

无需过多关注此处的实际代码,您所犯的最重要的错误是 == 运算符不会比较两个字符串。

在C语言中,字符串是一个字符数组,简单来说就是一个指针。所以 if("abcde"== some_string) 永远不会为真,除非它们指向同一个字符串!

您想使用类似“strcmp(char *a, char *b)”的方法,如果两个字符串相等则返回 0,否则返回其他值。 "strncmp(char *a, char *b, size_t n)"将比较 a 和 b 中的前 "n"个字符,如果相等则返回 0,这有利于查看字符串的开头(查看如果字符串以特定字符集开头)

你也不应该在你的 fscanf 中传递一个字符作为 %s 的指针!这将导致它完全破坏你的堆栈,它试图将许多字符放入 ch,ch 中只有一个字符的空间!正如 James 所说,您想执行类似 char ch[BUFSIZE] 的操作,其中 BUFSIZE 比您预期的单行大 1,然后执行“fscanf(inp, "%s", ch);”

希望对您有所帮助!

关于c - 循环直到找到特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4810490/

相关文章:

c - 如何在 Sublime Text 2 [MAC OS X] 上运行和编译 .c

与后增量和逻辑运算符混淆?

c - 如何将 printf() 包装到函数或宏中?

python - Python3中Elasticsearch .search对象返回错误

java - 是否有一种通用的 Java 方法来修剪对象图中的每个字符串?

c++ - 数组索引和地址返回相同的值

javascript - JavaScript 中的标准差计算器

php - 如何检查数组中的所有值是否相同?

java - 将多个字符串混合成所有可能的组合

c# - 获取单词对在一串单词中的位置