我无法理解函数中的错误[关闭]

Posted

技术标签:

【中文标题】我无法理解函数中的错误[关闭]【英文标题】: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 不会以空值终止。 ***.com/questions/49046/different-sizeof-results @squeamishossifrage 虽然纠正了它的误导性。你不说为什么 7.(或 3)。我知道为什么,但我不得不考虑一下。 听起来你想返回一个子字符串。请参阅this,它可能会有所帮助。 【参考方案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中字符串的定义

以上是关于我无法理解函数中的错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

无法理解编译器在复制构造函数上引发的错误消息[关闭]

PL/SQL 函数错误 - 无法理解

Swift 3 错误“无法调用非函数类型 'UITableView!' 的值” [关闭]

由于错误消息而无法计算 sqrt 函数 [关闭]

无法理解react.js中的处理事件[关闭]

获取未捕获的类型错误:无法读取未定义的属性“toLowerCase”[关闭]