相关疑难解决方法(0)

296
推荐指数
6
解决办法
38万
查看次数

在C字符串中'\ 0'之后内存会发生什么?

令人惊讶的简单/愚蠢/基本问题,但我不知道:假设我想让我的函数的用户返回一个C字符串,其长度我不知道在函数的开头.我可以在开始时仅在长度上放置上限,并且根据处理,尺寸可能缩小.

问题是,分配足够的堆空间(上限)然后在处理期间终止字符串是否有任何问题?即如果我在分配的内存中间插入'\ 0',(a.)是否free()仍能正常工作,并且(b.)'\ 0'之后的空格变得无关紧要?一旦'\ 0'被添加,内存是否会被返回,或者它是否位于占用空间直到free()被调用?将这个悬空空间留在那里通常是不好的编程风格,为了节省一些前期编程时间,在调用malloc之前计算必要的空间?

为了给出这个上下文,假设我想删除连续的重复项,如下所示:

输入"你好oOOOo !!" - >输出"Helo oOo!"

...以及下面的一些代码显示了我如何预先计算操作产生的大小,有效地执行两次处理以使堆大小正确.

char* RemoveChains(const char* str)
{
    if (str == NULL) {
        return NULL;
    }
    if (strlen(str) == 0) {
        char* outstr = (char*)malloc(1);
        *outstr = '\0';
        return outstr;
    }
    const char* original = str; // for reuse
    char prev = *str++;       // [prev][str][str+1]...
    unsigned int outlen = 1;  // first char auto-counted

    // Determine length necessary by mimicking processing
    while (*str) {
        if (*str != …
Run Code Online (Sandbox Code Playgroud)

c string malloc pointers c-strings

64
推荐指数
6
解决办法
7772
查看次数

标签 统计

c ×2

c-strings ×1

function ×1

malloc ×1

pointers ×1

strdup ×1

string ×1