首页 > 解决方案 > 在 C++ 中使用 strncpy() 需要帮助

问题描述

我在任务期间被困了好几个小时。具体来说,在这部分:

构造函数应采用 const 限定的 C 样式字符串作为其参数。使用库中的strncpy()函数<cstring>将其复制到底层存储中。请务必在复制后手动对属性进行空终止,以确保它是有效的 C 字符串(以防参数包含更大的字符串)。

我在哪里犯了错误,我应该如何更改我的代码?

错误信息

#ifndef STRINGWRAPPER_H
#define STRINGWRAPPER_H

class StringWrapper{
    public:
        StringWrapper (const char myString);
        
    const static int max_capacity = 262144;
    private:
        int size = 1;
        char myString [40];
};


#endif
#include "StringWrapper.h"
#include <cstring>

StringWrapper::StringWrapper (const char myString){
    strncpy(StringWrapper::myString, myString, sizeof(myString));
}
#include <iostream>
#include "ThinArrayWrapper.h"
#include "ArrayWrapper.h"
#include "StringWrapper.h"
#include <stdexcept>

int main(){
    
    char myString[]{ "string" };
    
    StringWrapper StringWrapper('h');
    
    
    
    return 0;
}

标签: c++

解决方案


首先,你的电话strncpy是错误的。请strncpy此处查看有关 的参考。

根据 的定义strncpy

char *strncpy(char *dest, const char *src, std::size_t count);

在你的情况下,你是这样打电话strncpy的:

strncpy(StringWrapper::myString, myString, sizeof(myString));

这里,myString是一个const char类型变量。你需要做到const char *。如果你愿意,你可以从这里检查我对你的代码的修改。


推荐阅读