【发布时间】:2016-01-30 04:16:39
【问题描述】:
我正在尝试编写一个函数,该函数返回从初始函数参数复制的指针,但开头和结尾没有空格('','\n','\t')。
char *ft_strtrim(char const *s)
{
unsigned char *p;
int start;
int end;
size_t index;
start = 0;
end = ft_strlen(s) - 1;
while (s[start] == '\n' || s[start] == '\t' || s[start] == ' ')
start++;
while (s[end] == '\n' || s[end] == '\t' || s[end] == ' ')
end--;
if (start == 0 && end == ft_strlen(s) - 1)
return ((char*)s);
if (end - start < 0)
return (NULL);
printf("%d\n", end - start);
p = (char*)malloc(sizeof(char) * (end + 1 - start));
index = 0;
while(start <= end)
{
p[index] = s[start];
index++;
start++;
}
p[index] = '\0';
return (p);
}
我想在 end - start 的值低于 0 时返回 NULL。即使在我用于调试函数之后的 printf 中,该值是负数,但当我编译时,该函数不返回 NULL代码我得到分段错误。
【问题讨论】:
-
如果
strlen(s) == 0、end == -1和s[end]是未定义的行为。 -
ft_strlen的定义是什么,这个函数的输入是什么? -
全空格字符串也是个问题。
while (s[end] == '\n' || s[end] == '\t' || s[end] == ' ') end--;是 UB。 -
"当我编译代码时出现分段错误。' --> 你的意思是当你运行代码时,你得到一个分段错误?
-
仅供参考
(end - start < 0)可以简化为(end < start)。发生这种情况的唯一情况是字符串为空或全是空格。这些正是您的代码导致未定义行为的情况,因为while循环在到达字符串的开头或结尾时不会停止。
标签: c function pointers null char