gpt4 book ai didi

C++,Odd Asci 输出与我的程序

转载 作者:行者123 更新时间:2023-11-28 06:01:51 29 4
gpt4 key购买 nike

在我的 C++ 中学习复制构造函数等的使用。我们得到了一个我们要完成的程序模板,但是我的输出在我的输出流中抛出了时髦的 asci 字符。

这是我的主要类(class):

#include <iostream>
using namespace std;
#include "Contact.h"
using namespace sict;

int main(){
Contact c("Empty Contact", 3);
c.display();
cout << "Enter Contact information: " << endl;
c.read();
c.display();
cout << endl;
for (int i = 0; i < 1000000; i++){
Contact temp("Testing the contact with a looooong "
"name that should be taken care of", 20);
if (!(i % 100000)){
cout << i << ":" << endl;
temp.display();
}
}
return 0;
}

联系人.cpp:

#include <cstring>
#include <iostream>
#include "Contact.h"
using namespace std;

namespace sict{


void Contact::display()const{
//display the name and go to new line
cout<< _name << endl;
// loop through elements of _pn up to _noPN and display them one by one
for(int i = 0; i < _noPN ; i++){
_pn[i].display();
}
// draw a 40 char line using '-' and go to new line
cout<<"----------------------------------------"<<endl;


}
Contact::Contact(){
_pn = nullptr;
}
Contact::Contact(const char* name, int number){
strncpy(_name, name,40);
_pn = new PhoneNumber[number];
_noPN = number;

}
Contact::~Contact(){
delete[] _pn;

}


void Contact::read(){
cout << "Contact Name: ";
cin.getline(_name, 41, '\n');
cout << "Please enter " << _noPN << " phone numbers: " << endl;
for (int i = 0; i < _noPN; i++){
cout << i + 1 << ": ";
_pn[i].read();
}
}



bool Contact::isEmpty()const{
return _pn == (PhoneNumber*)0;
}
void Contact::setEmpty(){
_name[0] = 0;
_noPN = 0;
_pn = (PhoneNumber*)0;// same as _pn = nullptr;
}
}

输出故障:

Empty Contact
----------------------------------------
Enter Contact information:
Contact Name: John Doe
Please enter 3 phone numbers:
1: Home, 123 1234567
2: Cell, 234 2345678
3: Work, 345 3456789
John Doe
Home..........., 123 123-4567
Cell..........., 234 234-5678
Work..........., 345 345-6789
----------------------------------------
0:
Testing the contact with a looooong nameôoc·lÐ
----------------------------------------
100000:
Testing the contact with a looooong nameôoc·lÐ
----------------------------------------
200000:
Testing the contact with a looooong nameôoc·lÐ
----------------------------------------
300000:
Testing the contact with a looooong nameôoc·lÐ
----------------------------------------
400000:
Testing the contact with a looooong nameôoc·lÐ
----------------------------------------
500000:
Testing the contact with a looooong nameôoc·lÐ
----------------------------------------
600000:
Testing the contact with a looooong nameôoc·lÐ
----------------------------------------
700000:
Testing the contact with a looooong nameôoc·lÐ
----------------------------------------
800000:
Testing the contact with a looooong nameôoc·lÐ
----------------------------------------
900000:
Testing the contact with a looooong nameôoc·lÐ
----------------------------------------

它应该看起来像什么:

Empty Contact
----------------------------------------
Enter Contact information:
Contact Name: John Doe
Please enter 3 phone numbers:
1: Home, 123 1234567
2: Cell, 234 2345678
3: Work, 345 3456789
John Doe
Home..........., 123 123-4567
Cell..........., 234 234-5678
Work..........., 345 345-6789
----------------------------------------

0:
Testing the contact with a looooong name
----------------------------------------
100000:
Testing the contact with a looooong name
----------------------------------------
200000:
Testing the contact with a looooong name
----------------------------------------
300000:
Testing the contact with a looooong name
----------------------------------------
400000:
Testing the contact with a looooong name
----------------------------------------
500000:
Testing the contact with a looooong name
----------------------------------------
600000:
Testing the contact with a looooong name
----------------------------------------
700000:
Testing the contact with a looooong name
----------------------------------------
800000:
Testing the contact with a looooong name
----------------------------------------
900000:
Testing the contact with a looooong name
----------------------------------------

如您所见,在名称末尾添加了一些 ascii 字符

我可以添加程序的其余部分,但是它很长,如果需要我会编辑这篇文章并添加它们。

最佳答案

strncpy(_name, name,40); 不会在字符串末尾添加空终止符。要修复它,只需添加一行 _name[40] = '\0'。对于短字符串,它恰好复制了它。对于较长的字符串 - 它在第 40 个符号处停止。

来自 cppreference

If count is reached before the entire array src was copied, the resulting character array is not null-terminated.

关于C++,Odd Asci 输出与我的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33131718/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com