如何解决"No source available for " msvcrt!fgets() " " 的问题

How to resolve the issue "No source available for "msvcrt!fgets() " "

本文关键字:msvcrt fgets 问题 for No 何解决 解决 source available      更新时间:2023-10-16

代码

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
class Chkinval
        {
         char  *inval;
         char *inarray;
         public:
         void inPutProcessor();
        };

void Chkinval::inPutProcessor()
{
     cout << "Input" ;
     fgets(inval,1000,stdin);
     int tmp = atoi(inval);
     for(int lpcnt=0;lpcnt< tmp;lpcnt++)
     {
           fgets(inarray,1000,stdin);
     }
     for(int lpcnt=0;lpcnt< tmp;lpcnt++)
     {
         cout << "The array elements" << inarray[lpcnt];
     }
    }
int main()
{
    Chkinval tmp1 ;
    tmp1.inPutProcessor();
    return 0;
    }

问题:

程序编译良好,但在控制台中没有结果

在调试模式

我收到错误消息"No source available for"msvcrt!fgets((">

这是操作系统问题还是我需要安装任何库?

现在的代码问题是invalinarray都没有初始化,因此您将向任意内存位置读取多达1000个字节。

 for(int lpcnt=0;lpcnt< tmp;lpcnt++)
 {
       fgets(inarray,1000,stdin);
 }

可能也不是您想要的(即使inarray已初始化(,因为它将覆盖每次迭代中的内容。

 fgets(inval,1000,stdin);
 int tmp = atoi(inval);

这本身并没有错,但您可能最好使用fscanf(stdin, "%d", &tmp)(如果您正在编码C,请继续阅读(。

很多这样的问题源于这样一个事实,即您的代码非常像C。没有理由(除非是家庭作业(在C++中独自管理这么多分配。下面是一个小例子,展示了一种更具C++风格的方法:

#include <iostream>
#include <vector>
#include <string>
int main()
{
    std::cout << "Number of elements to read? " << std::flush;
    // How many lines should we read?
    int count;
    if (!(std::cin >> count) || count <= 0) {
        std::cout << "Invalid element count" << std::endl;
        return 1;
    }

    std::string line;
    std::vector<std::string> lines;
    // Read until EOF (to get newline from above reading)
    if (!std::getline(std::cin, line)) {
        std::cout << "Error reading line" << std::endl;
        return 1;
    }
    // Read lines one at a time adding them to the 'lines' vector
    for (int i = 0; i < count; i++) {
        if (!std::getline(std::cin, line)) {
            std::cout << "Error reading line" << std::endl;
            return 1;    
        }
        lines.push_back(line);
    }
    // Echo the lines back
    for (std::vector<std::string>::const_iterator line_iterator = lines.begin(); line_iterator != lines.end(); ++line_iterator) {
        std::cout << *line_iterator << 'n';
    }
    return 0;
}