Это выглядит довольно близко ко мне. Строки в C заканчиваются нулем, что означает, что конец строки обозначен нулевым символом. В некотором смысле строка в C на самом деле является просто массивом байтов.
Когда вы делаете:
cout << "enter the name of the first item: ";
cin >> name;
Если я введу строку «Книга», в памяти она будет выглядеть примерно так:
|0|1|2|3|4|5..49|
|B|o|o|k|0|*HERE BE DRAGONS*
Ну, действительно, он будет содержать ASCII-значения , соответствующие этим буквам, но для наших целей он содержит эти буквы. here be dragons
- это память, которую вы не инициализировали, поэтому она содержит любой мусор, установленный вашей платформой.
Поэтому, когда вы копируете свою строку, вам нужно вместо этого искать этот 0
байт в конце строки.
for(int i=0; name[i]!=0; i++)
{
cart_of_names[0][i] = name[i];
}
Затем, когда вы выводите его, вам на самом деле не нужно делать это символом за раз. Вы можете просто сделать cout<<cart_of_names[0]
. cout
знает, где заканчивается строка из-за этого завершающего нулевого символа.