gpt4 book ai didi

c - 在 C 中创建一个 StartsWith 函数,得到 "Segmentation fault",有什么问题吗?

转载 作者:行者123 更新时间:2023-11-30 19:57:23 27 4
gpt4 key购买 nike

我正在尝试创建一个 startswith 函数,如果我有一个字符串组成
“你好,我是基拉”
将拆分为第一个单词
“你好”

我真的尽了最大努力才把它变成这样

#include <stdio.h>
unsigned char *startswith(unsigned char *str)
{
char *result;
char *cstr = (char *)str;
for (int i=0; cstr[i] != ' '; i++)
result[i] = cstr[i];
return(result);
}

int main()
{
printf("%s\n",startswith("What is your name momo?"));
return 0;
}

应该打印“在我的想象中”

What

和一个换行符,然后以0退出但我在编译时遇到未知的神圣错误

Segmentation fault

我不明白为什么会发生这种情况,甚至无法找到问题所在
gcc 没有帮助或向我显示警告

stdio.h header 只是为了不再打印结果
我知道有一种方法可以在不使用任何标准库的情况下实现这一目标,但我需要领先

谢谢!

最佳答案

结果中分配一些内存。结果=malloc(sizeof(char)*MAXLEN);

现在您正在访问存储在结果中的一些垃圾值。

访问未初始化的变量是未定义的行为

<小时/>
  • 您还可以分配 strlen(str)+1,因为您知道无论结果是什么,最多都与 str 一样长。

  • $7.20.3.1 另一点是,您可以使用 calloc 函数,将空间初始化为所有位零。这样做的好处是始终具有一个以 null 结尾的字符串,即使您不小心省略了 nul-termination1

<子>1。大卫·C·兰金指出

关于c - 在 C 中创建一个 StartsWith 函数,得到 "Segmentation fault",有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45993265/

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