C ++中的字符串到结构

时间:2018-06-04 09:02:12

标签: c++ string struct

我有一个字符串变量

string pr00("")

我想调用方法fun1

fun1(demo *dm)

演示定义如下

typedef struct 
{
    char pr00[100];
}demo;

将此方法称为

是安全的
fun1((demo*)pr00);

谢谢,BR

3 个答案:

答案 0 :(得分:2)

不,这是不安全的。因为std::string的成员与demo不同。

但您可以定义构造函数以隐式转换std::stringdemo类型。

#define MAX_SIZE    100
struct demo 
{    
    demo(const std::string& str)
    {
       memset(pr00, 0, MAX_SIZE);

       if (str.length() < MAX_SIZE)
       {
           strncpy(pr00, str.c_str(), str.length());
           pr00[str.length()] = 0;
       }
    }

    char pr00[MAX_SIZE];
};

现在您可以编写代码:

std::string name("hello world");
demo d(name);

答案 1 :(得分:1)

不,fun1((demo*)pr00);是未定义的行为。您需要将pr00中的字符(最多100个)复制到demo并将指针传递给fun1

demo dm;
std::copy_n(pr00.data(), std::min(100, pr00.size()), dm.pr00);
fun1(&dm);

答案 2 :(得分:0)

我假设<input type="text" class="form-control" name="fname"> 表示func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { // BEFORE ANIMATION CONTEXT UIView.animate(withDuration: 0.75, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: { // ANIMATION TILL END CONTEXT self.layoutIfNeeded }, completion: { // AFTER ANIMATION CONTEXT }) }

这不仅不安全,而且无效。问题有string

这是尝试将结构强制转换为指针。非法,如果您的编译器具有允许的设置,请将其关闭。

关于std::string,有一个更有趣的问题。 请注意fun1((demo*)pr00)获取fun1((demo*)&pr00)的地址。

它仍然是未定义的行为,但至少它是在不相关的结构之间转换指针。

您可以定义&并致电pr00,但void fun2(char*cp)fun2((char*)&pr00)可以安全地执行的操作有很多限制。

你不应该对cp的布局做任何假设,所以你应该'访问fun2()(特别是不要写它),假设你可以找到什么。