为什么在一个函数中读取的全局变量 (char[]) 在另一个函数中使用时显示垃圾?

当我在 read 函数中输入 id 的值时,它读取正确的值,但是当我在显示函数中打印它时,它会在它之后添加一些垃圾......我尝试在字符串后添加 '\0' 没有变化! 请帮我解决这个问题。 这也只发生在 TURBO C++ 中,而我的代码在 DEV C++ 中完美运行,以及在 CMD 上与 MINGW 一起运行时。请解释在 turbo c++ 中如此荒谬的输出的原因。 这是我在 turbo c++ 中运行的 c++ 代码:

  #include <iostream.h>
    #include <string.h>
    #include <stdio.h>
    #include <conio.h>
   //using namespace std;
   class Student
   {
    private:
        char name[50],course[10],id[10];
        long int roll_no,year;
public:
    void read()
    {
        //clrscr();
        cout<<"ENTER NAME"<<endl;
        gets(name);
        cout<<"ENTER ID"<<endl;
        cin>>id;
        cout<<"ENTER ROLL NUMber"<<endl;
        cin>>roll_no;
        cout<<"ENTER COURSE"<<endl;
        cin.ignore();
        gets(course);
        cout<<"ENTER YEAR (in number)"<<endl;
        cin>>year;
    }
    void display()
    {
        cout<<"NAME:"<<name<<endl;
        cout<<"ID:"<<id<<" "<<endl;
        cout<<"ROLL NO:"<<roll_no<<endl;
        cout<<"COURSE AND YEAR:"<<course<<" "<<year<<"year"<<endl;
    }
};
int main()
{
    Student s;
    s.read();
    s.display();
    return 0;
}

现在在输出 id 中添加了一些随机垃圾值。

为什么在一个函数中读取的全局变量 (char[]) 在另一个函数中使用时显示垃圾?

newsatan 回答:为什么在一个函数中读取的全局变量 (char[]) 在另一个函数中使用时显示垃圾?

当我们在大小为 'n' 的 turbo 中声明一个 char[] 并为其提供 n 个字符时,它没有空字符的空间,因为 turbo c++ 需要额外的空间来为 '\0' 而没有结尾的字符串有垃圾添加到它。因此,如果声明了 id[11] 或 >11,那么它将为 '\0' 留出空间,因此不会打印垃圾。

本文链接:https://www.f2er.com/1078790.html

大家都在问