【问题标题】:Char Pointer Malloc/Realloc字符指针 Malloc/Realloc
【发布时间】:2020-04-08 20:47:00
【问题描述】:

我正在尝试做的是一个小程序,它采用一组数字(每个示例 123654000256)并在检测到“0”后删除所有数字(如果我输入 1230456 应该返回 123),所以我试图用 malloc / realloc 来做,但是当我 realloc 它仍然返回所有元素

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    char *suite;
    int i,a,temp;

    suite = (char*)malloc(100*sizeof(char));
    printf("Enter a suite of numbers : ");
    scanf("%s",suite);

    i=-1;
    do{
        i++;
        a=i;
    }while((suite[i]-'0') != 0);

    suite = realloc(suite,a*sizeof(char));
    printf("New suite: ");
    printf(suite);

    return 0;
}

我输入 4564560123 它在我输入时返回它,这是什么问题?

【问题讨论】:

标签: c pointers malloc allocation realloc


【解决方案1】:

您需要为 + 1 重新分配空间以适应空终止符,然后空终止字符串 suite[a] = '\0'


为什么这个错误给了你整个数字序列:

一旦你调用了realloc,它仅仅意味着系统可以将之前分配的内存的剩余部分用于其他目的。没有“删除”内存之类的东西,它只会失效,旧数据将保留在这些内存单元中,直到用于其他目的。

因此,如果您忘记了空终止并且系统尚未使用该内存,则旧数据将保留在那里,这就是您获得完整序列作为输出的原因。但没有保证您会得到旧数据 - 程序也可能崩溃。

【讨论】:

  • @AhmedZrouqui 为答案添加了解释。
猜你喜欢
  • 2018-02-10
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2019-05-06
  • 2021-08-31
  • 1970-01-01
相关资源
最近更新 更多