c - 循环内的 fgets C

标签 c validation

  char in[20];
  char out[20];
  for(int i=0; i < nEdges ;i++){

     char str[50];
     fgets(str, 50, stdin);
     char *result = NULL;
     result = strtok(str, " ");
     int count = 0;
     int i = 0;
     char name[2][20];

     while(result != NULL){
       strncpy(name[i],result,20);
       result = strtok( NULL, " ");
       count++;
       i++;
    }

    if(count > 2){
      errorMsg2();
    }else{
      i = strlen(name[1]);
    for(int x=0; x < i ;x++){
      if(name[1][x] == '\n')
        name[1][x] = '\0';
      strncpy(out,name[0],20);
      strncpy(in,name[1],20);
    }

嗨,我正在尝试读取一行并验证只有两个元素,否则会出现错误消息。这一切都在 for 循环内,当我执行程序时,fgets 从未要求我输入。 fgets 在循环内工作吗?

最佳答案

是否在循环内使用 fgets 并不重要。可能存在不同的问题。使用调试器单步调试将是最好的选择。

一个潜在的问题是将 strncpy 执行到 name 的循环。如果缓冲区中有两个以上的项目,那么它将写入 name 数组的范围之外。在覆盖之前(而不是之后)添加检查以避免这种可能性可能会很好。

另一个可能的问题是变量i的使用。您可能会遇到一些范围界定问题。该变量在主循环中使用,然后通过调用 strlen 在该循环内进行更新。这可能会导致主循环提前结束(取决于 nEdges 的值和 name[1] 的长度。在任何一种情况下,它都可能不是所需的结果。

关于c - 循环内的 fgets C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5980039/

相关文章:

java - 使用 boolean 值从用户字符串 java 输入验证

java - 如何在 android 中验证伊朗国家代码(Melli 代码或代码 Melli)

c - 什么情况下我们使用堆排序?

python - 如何比较 flask 中的两个密码

c - SWIG R 包装器未正确设置类/从 C 内存指针创建 R 对象

c - 如何使用 RSA_generate_key 始终生成不同的公钥

javascript - 正则表达式验证两个范围之间的数字

validation - UML 模型的语义方面如何用于代码生成、有效性检查和复杂性度量?

c++ - 无法理解核心文件分析的 GDB x 命令输出

c++ - 使用向上(或向下)舍入将 long double 转换为 double