m0_62995344 2023-03-31 10:42 采纳率: 70%
浏览 40
已结题

字符串直接赋值与通过cin赋值的差别

string直接赋值和通过cin赋值有什么不一样吗?

这是c++连接mysql数据库进行查询操作

img

img

这里是希望将查询条件赋值给str
如果直接赋值 string str = “where singer = ’rihanna‘”程序能正常进行,但是如果通过cin赋值的话就会报错
能解释一下为什么吗

  • 写回答

3条回答 默认 最新

  • 小学弟QAQ 2023-03-31 14:27
    关注

    在 C++ 中,std::string 和字符数组之间有一些重要的区别。其中一个主要区别是使用字符串字面值(如 "where singer = 'rihanna'")时,C++ 编译器会自动为其添加一个空字符('\0')来表示字符串的结尾。而通过 cin 输入的字符串不会在末尾自动添加空字符,因此需要手动添加。

    在您的代码中,如果直接赋值字符串字面值给 str 变量,则字符串字面值在内部实际上已经包含了 '\0' 字符,这就是为什么您可以在不添加空字符的情况下使用字符串字面值。但是,如果您通过 cin 输入字符串,则输入的字符串末尾没有 '\0' 字符,因此需要手动添加。

    为了解决这个问题,您可以在读取输入后将字符串的末尾添加一个空字符,例如:

    std::string str;
    std::cout << "请输入查询条件:";
    std::cin >> str;
    str += '\0'; // 添加空字符
    此时,您应该就能够正常地将字符串作为参数传递给 mysql_query() 函数了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 修改了问题 3月31日
  • 创建了问题 3月31日

悬赏问题

  • ¥15 weditor无法连接模拟器Local server not started, start with?
  • ¥20 6-3 String类定义
  • ¥15 嵌入式--定时器使用
  • ¥15 基于OPENCV的人脸识别
  • ¥20 51单片机学习中的问题
  • ¥30 Windows Server 2016利用兩張網卡處理兩個不同網絡
  • ¥15 Python中knn问题
  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题