我无法理解函数中的错误[关闭]
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中字符串的定义以上是关于我无法理解函数中的错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章