字符序列序列错误

时间:2011-07-31 14:26:40

标签: c++ data-structures char

我无法将定义长度的char序列数组存储到struct的对象中。我可以在不定义字符长度或只使用字符串的情况下使其工作,但它只是困扰我为什么会发生这种情况。

代码:

#include <iostream>
#include <string>
using namespace std;

struct highscore {
char name[50];
int score;
char date[10];
} hstable[9];

void printtable (highscore show_tab) {
cout << show_tab.name << show_tab.score << show_tab.date;
};

void main() {
hstable[0].name = "Kyle ";
hstable[0].score = 100;
hstable[0].date = " 01/03/88 \n";

printtable (hstable[0]);
system("pause");
 return;

};

错误:

错误C2440:'=':无法从'const char [6]'转换为'char [50]' 1 GT;没有可以进行此转换的上下文

错误C2440:'=':无法从'const char [12]'转换为'char [10]'

4 个答案:

答案 0 :(得分:5)

如果你想这样做,你应该使用strcpy标题中的strncpy(或<cstring>)函数。

strcpy(hstable[0].name, "Kyle ");

但请考虑使用std::string而不是普通字符数组。

注意:char[10]太小而不能将" 01/03/88 \n"存储为C字符串,因此您已经陷入了C字符串提供的众多陷阱之一(缓冲区溢出)情况)。

答案 1 :(得分:4)

您无法在C ++中分配数组(字符串文字是const char数组)。您必须逐个元素地复制它们,对于以null结尾的char数组,使用strncpy的方法是这样做。

更好的,C ++风格的方法是将namedate转换为std::string,但可以分配用明显的语法。

答案 2 :(得分:2)

这是您在C ++中编程应该或多或少的样子

#include <iostream>
#include <string>
#include <vector>

struct HighscoreEntry {
    std::string name;
    int score;
    std::string date;

    HighscoreEntry(const std::string& name,
                   int score,
                   const std::string& date)
        : name(name), score(score), date(date)
    { }
};

std::vector<HighscoreEntry> high_scores;

std::ostream& operator<<(std::ostream& s, const HighscoreEntry& hs) {
    return s << hs.name << " " << hs.score << " " << hs.date << "\n";
}

int main(int argc, const char *argv[]) {
    high_scores.push_back(HighscoreEntry("Kyle", 100, "01/03/88"));
    std::cout << high_scores[0];
}

为什么呢?有很多理由说SO答案不适合全部包含它们......有书籍可供选择。你应该选择a good C++ book并从封面到封面阅读以学习C ++。只需在编译器中键入一些代码,希望通过逻辑和实验来学习它,就可以解决C ++的灾难。

你有多聪明并不重要......你无法以这种方式学习C ++。实际上从某种意义上说,你越聪明,越难(因为你会尝试使用逻辑来填补空白,但有些地方C ++根本就没有逻辑 - 主要是出于历史原因)。

C ++可以是一种非常好的语言,但从错误的角度来看它可能会成为你最糟糕的噩梦(好吧......无论是你的噩梦还是C ++软件用户最糟糕的噩梦)。

答案 3 :(得分:0)

  • 在C ++中,您应该使用std::string
  • 在C中,要将字符串文字复制到字符数组,请使用strcpy(),或者更好的是memcpy()