【问题标题】:I can't understand an error in a function [closed]我无法理解函数中的错误[关闭]
【发布时间】:2017-07-14 22:06:16
【问题描述】:

这个函数用了好几次就报了一个奇怪的错误,实在是搞不懂是什么原因。

    char *get_range(char *str,int min,int max){
    char *_res=(char *)malloc(sizeof(str));
    int cur=0;
    while (min<max){
        _res[cur]=str[min];
        min++;
        cur++;
        }
    return _res;
    }

问题是多次使用这个函数后,输出带有额外的字符,我不明白为什么。

注意:额外的字符总是由函数beffor返回的

【问题讨论】:

  • malloc(sizeof(str)); 为最多 7 个字符的字符串保留足够的内存。您可能应该将其更改为 malloc(strlen(str)+1);
  • 1) sizeof(str) 是指针 (char *) 大小。 2) _res 不会以空值终止。
  • @squeamishossifrage 虽然纠正了它的误导性。你不说为什么 7.(或 3)。我知道为什么,但我不得不考虑一下。
  • 听起来你想返回一个子字符串。请参阅this,它可能会有所帮助。

标签: c


【解决方案1】:
  char *_res=(char *)malloc(sizeof(str));

错了。 sizeof(str) 正在测量 char 指针的大小。这取决于您的系统(32 位或 64 位),通常为 4 或 8。

你需要

char *_res=(char *)malloc(strlen(str) + 1);

strlen返回字符串中的字符个数,结束的0需要加1;

其次,你必须在末尾添加一个终止零,这样做:

_res[cur] = '\0'; 

返回之前

【讨论】:

  • 真的谢谢你......如果我正在处理字符串数组,我还有另一个问题......我应该手动将终止字符添加到每个字符串中,这是真的吗?!
  • 每一个c字符串的末尾必须有一个'0',这就是C中字符串的定义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 2013-07-31
  • 1970-01-01
  • 2021-01-06
  • 2011-09-18
  • 1970-01-01
  • 2015-12-25
相关资源
最近更新 更多