gpt4 book ai didi

c - 编写一个函数,从 C 中的字符串中删除最后一个字符。段错误(核心转储)错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:15:15 25 4
gpt4 key购买 nike

我正在尝试按照主题中的说明实现该功能,但出现错误:Segmentation fault (core dumped)。我的错误是什么?

char* removelast(char* s) {
char* r = s;
while (*s) {
s++;
}
s--;
*s = '\0';
return r;
}

最佳答案

下面的代码有几个问题:

char* removelast(char* s) {
char* r = s;
while (*s) {
s++;
}
s--;
*s = '\0';
return r;
}
  1. 它不会像s==NULL那样检查输入的有效性
  2. 如果输入是空字符串(正如@Swordfish 在评论中所指出的那样),此代码将调用未定义的行为
  3. 如果输入是 const char *(例如“Hello World!”),此代码还会调用未定义的行为

我建议将函数签名更改为 char *removeLast(const char * s),检查输入有效性,为没有 last 的字符串分配 new 缓冲区特点。将所需字符从 s 复制到新字符串并返回其指针。

类似的东西(希望它有效,没有检查它)

char *removeLast(const char *s)
{
char *newStr = NULL;
size_t sLen; // length of the 's' string

// check for 's' validity (not NULL and not empty) and successful 'malloc'
if ( s && (sLen = strlen(s)) && (newStr = malloc(sLen)) )
{
int res = strcpy_s(newStr, sLen - 1, s);
if (!res)
{
newStr[sLen - 1] = '\0';
}
else // strcpy_s error
{
free(newStr);
newStr = NULL;
}
}

return newStr;
}

关于c - 编写一个函数,从 C 中的字符串中删除最后一个字符。段错误(核心转储)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52576462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com