c++ - 比较 c 字符串和 c++ 字符串会产生分段错误吗?
问题描述
仅当类电影名称列表(此类别中的所有电影)中不存在 Movie.name 时,我才尝试将电影对象添加到电影中,我的代码是
void Movies::add_movie(char name[], unsigned short rating, unsigned short watched_times)
{
for (size_t counter{0}; counter <= (names_list.size() -1 ); ++counter)
{
if (names_list[counter] == name) // Name is converted to c++ string
cout << "Movie already exists " << endl;
else {
auto *x = new Movie{name, watched_times, rating};
included_movies.push_back(x);
cout << "Added movie " << name << " Successfully" << endl;
names_list.emplace_back(name);
}
}
}
类定义是
class Movies {
private:
char categery[20]{};
vector <Movie*> included_movies;
vector <string> names_list;
public:
void list_movies();
explicit Movies(char[]);
~Movies();
void add_movie(char name[], unsigned short rating, unsigned short watched_times);
};
但每次运行
comedy.add_movie("Alice in wonder land", 5, 1);
给了我一个分段错误,那么到底是什么问题。错误源于 if 语句(进行比较的语句)所以为什么。
编辑
有人注意到我正在从 size_t 中减去,所以这当然是不允许的,所以我尝试修复它并使用 do-while 循环,但仍然存在错误,新代码是但也没有区别,并且 if 语句执行中仍然存在错误
void Movies::add_movie(char name[], unsigned short rating, unsigned short watched_times)
{
size_t counter{};
do{
if (names_list[counter] == name) // Name is converted to c++ string
cout << "Movie already exists " << endl;
else {
auto *x = new Movie{name, watched_times, rating};
included_movies.push_back(x);
cout << "Added movie " << name << " Successfully" << endl;
names_list.emplace_back(name);
}
counter++;
}while(counter <= names_list.size());
}
解决方案
推荐阅读
- php - Google 日历 API:来自事件的描述包含意外字符
- templates - 将文档插入模板时签名消失
- c# - EF Core 3 DbQuery 等效功能
- animation - 制作一张足以容纳子文本的卡片
- c++ - 如何在 C++ 14 的类中启动线程?
- magento2 - 如何在 Magento 2 中从索引控制器获取值到集合
- ios - Swift - 即使在填充数据后数组似乎也是空的
- django - 在 Django 中使用 Dask 读取上传的 CSV 时出错:“InMemoryUploadedFile”对象没有属性“startswith”
- azure-cosmosdb - 如何读取多个 CosmosDB 文档
- android - Android 在启动片段之前加载片段视图。需要审查