Запись значения в строку стиля c в структуре

0

Для жизни я не могу понять, почему я не могу написать строку стиля ac внутри структуры.

Студент колледжа - не может использовать класс строк, не узнал указатели.

Помогите? 2 часа, пытаясь понять это.

#include <iostream>

using namespace std;

void strCopy(char from[], char to[])
{     
    for (int i = 0; i < 255; i++)
    {
        to[i] = from[i];
    }
}

struct card
{
    char suit[20];
    char rank[20];
    int cvalue;
    char location[20];
};

void printCard(card card)
{
    cout << card.rank << " of " << card.suit << endl;
}

int main() 
{
    // I don't think strCopy() the problem, I've used it with my last project.
    cout << "Test strCopy()" << endl;

    char str1[14] = "abcdefghijklm";
    char str2[14];

    strCopy(str1, str2);

    cout << "    " << str2 << endl << endl;

    // Now the negative.
    card one;
    one.cvalue = 2;
    strCopy("Somewhere", one.location);
    strCopy("Two", one.rank);
    strCopy("Hearts", one.suit);

    printCard(one); 
}
  • 2
    Ваша функция strCpy () всегда записывает 255 символов, но ваши массивы char содержат только 20 символов. Таким образом, каждый раз, когда вы вызываете strCpy (), вы записываете конец массива и все, что бог знает, что еще ...
  • 0
    for (int i = 0; i < 255; i++) Вт. Ваши строки имеют длину 14/20 char , вы положительно сбрасываете свой стек.
Теги:
struct
c-strings

1 ответ

0
Лучший ответ

//Я не думаю, что strCopy() проблема, я использовал ее с моим последним проектом.

Неправильно

for (int i = 0; i < 255; i++)
{
        to[i] = from[i]; 
}

копирует 255 символов, однако это не то, что вы имели в виду.

Если здесь:

strCopy(str1, str2);
cout << "    " << str2 << endl << endl;

Вы получаете "правильный" вывод, тогда вам просто не повезло, так как это вызывает неопределенное поведение, вы сбрасываете конец массива.

  • 0
    Видимо, мне нужна помощь с strCopy (). -___-. Спасибо!
  • 0
    @CesarVega Смотрите здесь stackoverflow.com/q/5695992/1870232

Ещё вопросы

Сообщество Overcoder
Наверх
Меню