如何解决问题“没有可用的源”msvcrt!fgets()“”

时间:2011-09-07 07:06:45

标签: c++ eclipse-cdt

代码

#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;
    }

问题:

程序编译正常但控制台没有结果

在调试模式下

我收到错误消息“没有可用的源”msvcrt!fgets()“”

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

1 个答案:

答案 0 :(得分:2)

现在的代码问题是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;
}