繁体   English   中英

循环C中的fget

[英]fgets inside a loop C

  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从不要求我输入。 fget在循环中起作用吗?

是否在循环内使用fgets并不重要。 可能存在另一个问题。 使用调试器逐步解决它是最好的选择。

一个潜在的问题是将strncpy转换为name的循环。 如果缓冲区中有两个以上的项目,则它将在name数组的边界之外写入。 最好在覆盖之前(而不是之后)添加一个检查以避免这种可能性的检查。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM