gpt4 book ai didi

c - 返回参数不起作用 - 给我一个奇怪的错误

转载 作者:行者123 更新时间:2023-11-30 15:11:20 24 4
gpt4 key购买 nike

这是一个简单的程序,它应该从字符串创建一个子字符串,然后它应该返回该子字符串作为可以打印出来的内容。这实际上是一个练习,只能改变子字符串函数。问题是我找不到不会引发各种警告和错误的返回类型。

我应该如何更改返回类型?

static void panic(const char *serror)
{
printf("%s", serror);
exit(1);
}

static void *xmalloc(size_t size)
{
void *ptr;
if (size == 0)
panic("Size is 0!\n");
ptr = malloc(size);
if (!ptr)
panic("No mem left!\n");
return ptr;
}

static char *substring(const char *str, off_t pos, size_t len)
{
char out [len];
int index;

for(index = 0; index < (pos + len); index++)
{
if(index >= pos && index < (pos + len))
{
out[index - pos] = str[index];
}
}

return out;
}

int main(int argc, char **argv)
{
char *foo = "Nicht\n";
char *bar = substring(foo, 2, 3);
printf("%s", bar);
free(bar);
return 0;
}

最佳答案

您调用了两个未定义行为:

  • 取消引用指向已经消失的局部变量的指针bar
  • 传递一个非NULL指针,该指针不指向通过malloc()calloc()分配的缓冲区realloc()

另请注意

  • 您必须通过添加空字符来终止字符串。
  • 您的循环效率不高。

更正的代码:

static char *substring(const char *str, off_t pos, size_t len)
{
char *out = xmalloc(len + 1);
int index;

for(index = pos; index < (pos + len); index++)
{
out[index - pos] = str[index];
}
out[len] = '\0';

return out;
}

关于c - 返回参数不起作用 - 给我一个奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35691275/

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