如何处理分配的字符串输入?

时间:2019-04-14 11:32:07

标签: c string

我正在编写一个函数,当我在第二个参数中发现问题时,它将字符串连接起来。 这是我的功能的简化版本

struct c_class* _Append_s(void* self, const char* str,const DWord length) // DWord is unsigned int
{
    struct c_class* this = self;

    this->inStr = realloc(this->inStr, length + this->len);
#pragma warning(disable:4996)
    strcpy(this->inStr + this->len, str);  // MSVC does an annoying warnings C4996
#pragma warning(default:4996)
    this->len += length;

    return this;
}

此函数将struct c_class*作为输入参数(void* self),附加string并将其length以字节为单位,并返回struct指针(使其连续)来电) struct c_class本身包含char * inStr和字符串长度。但是事实并非如此。

作为输入_Append_s可以使用常规const字符串char* in = "some text",char数组-char in[10],也可以采用分配的字符串char* inm = malloc(n)

所以问题是:

1)我可以以某种方式跟踪分配的字符串并在连接时释放它们吗?最好没有其他输入,因为它是一个内部函数,我从int和char *类型的包装器中调用它。

2)也许有一种方法可以将分配的字符串转换为const字符串表达式,然后再释放内存?

如果第二件事可行,则第一个问题会过时,因为它解决了一个问题,我需要产生一个完成的字符串并释放一个内存,struct c_class*会占用该内存

1 个答案:

答案 0 :(得分:0)

如果要释放char数组,只需在free((char*)str);上方添加return this;,但是也许我不太了解您。

正如约翰·汉弗莱斯(John Humphreys-w00te)在此答案https://stackoverflow.com/a/12204279/6911200中指出,警告C4996表示:

  

strcpy函数由于没有边界检查的事实而被认为是不安全的,并且可能导致缓冲区溢出。

     

因此,如错误描述中所建议,您可以使用strcpy_s代替strcpy

strcpy_s( char *strDestination, size_t numberOfElements,
const char *strSource );